У меня возникают проблемы с порядком выполнения javascript, когда я использую сценарий содержимого для вставки некоторого 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");
И это содержимое внедренного скрипта 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 выполняется перед сценарием внутри HTML-страницы , при этом ничего не меняя внутри HTML-страницы?
Установка атрибута async
на false
перед appendChild
, похоже, не работает, поскольку он используется для упорядочивания между внешними скриптами, а не между внешними скриптами и внутристраничным скриптом.
Кстати, я тестирую это в Chrome 27.0.1453.9