У меня возникла проблема с порядком выполнения javascript, когда я использую содержимое script для вставки некоторого javascript в HTML-страницу:
Это моя HTML-страница, которую я использую для тестирования, test.html:
<html><head>
<title>Test Page</title></head>
<body>
<script>
console.log("In page");
</script>
</body>
</html>
Это javascript, который я использую для добавления дополнительного кода в HTML-страницу, injector.js:
var s = document.createElement("script");
s.src = chrome.extension.getURL("inject.js");
document.documentElement.appendChild(s);
console.log("Inject finished");
И это содержимое введенных script, inject.js:
console.log("Inside inject.js");
И, наконец, это мой manifest.json:
"web_accessible_resources": [
"inject.js"
],
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["/injector.js"],
"run_at": "document_start"
}
]
Теперь, когда я открываю test.html, это то, что я получил в своей консоли:
Inject finished
In page
Inside inject.js
Мой вопрос: почему In page
распечатывается до Inside inject.js
? Не предполагается ли запуск inject.js
первым, так как я установил run_at
в document_start
?
Если это по дизайну, есть ли способ убедиться, что содержимое внутри inject.js выполняется до script внутри HTML-страницы , не изменяя ничего внутри HTML-страницы
Настройка атрибута async
на false
до appendChild
не работает, поскольку он используется для упорядочения между внешними скриптами, а не между внешними скриптами и страницей script.
Кстати, я тестирую это на Chrome 27.0.1453.9