Я прочитал этот вопрос Is it possible to inject a javascript code that OVERRIDES the one existing in a DOM?, и решение работает хорошо, но иногда кажется, что JavaScript-код на странице будет запускаться первым, а затем content_scripts.Проблема при введении кода javascript, который OVERRIDES существует в DOM?
Это приведет к тому, что «OVVERRIDES» не удалось.
Мой тестовый код, как показано ниже:
//manifest.json
"content_scripts": [
{
"matches": ["http://*/*"],
"js": ["js_injector.js"],
"run_at": "document_start"
}
//js_injector.js
function injectJs(link) {
var scr = document.createElement('script');
scr.type="text/javascript";
scr.src=link;
document.documentElement.appendChild(scr);
}
injectJs(chrome.extension.getURL('my.js'));
//my.js
console.log("in my.js");
function foo() {
console.log("in my.js foo");
}
//test.html (view this page in chrome)
<html>
<script type="text/javascript">
console.log("I am here 1110");
foo()
console.log("I am here 1111");
</script>
</html>
Обычно я доберусь ниже бревна:
in my.js my.js:114
I am here 1110 test.html:4
in my.js foo my.js:116
I am here 1111 test.html:6
Но иногда, ниже журналы будут получены:
I am here 1110 test.html:4
Uncaught ReferenceError: foo is not defined test.html:5
in my.js test.js:114
Кажется, что порядок запуска кода на страницах и скрипты содержимого являются случайными? И моя цель позволяет целевым страницам запускать js apis, который определяет в сценариях контента. Кто-нибудь знает, как это исправить? Спасибо!