当我使用:
运行Chromium浏览器时chromium-browser --load-extension = / path / to / my / extension --user-data-dir = / path / to / chrome / profile --app = http:// localhost / somepage
某些内容脚本未注入页面。这些脚本在清单文件中定义如下:
"content_scripts" : [{
"matches" : [ "http://*/*", "https://*/*" ],
"js" : [ "content/s1.js", "content/s2.js", "content/s3.js", "content/s4.js" ],
"run_at" : "document_end"
}]
检查页面时,我发现只有s1.js
和s4.js
成功注入。重新加载页面后,所有脚本都正确注入,我的扩展程序按预期工作。
原因是什么,以及如何调试?
修改
那些内容脚本(有时无法注入)在开头引用'document'。好像我把它们包装成类似的东西:
setTimeout(function() { document. ... }, 5000);
它们总是按预期注入。是否有可能该文档不可用,即使“run_at”:在清单中指定了“document_end”?
谢谢!
答案 0 :(得分:1)
你可以做得更好:
创建1个content.js脚本:
/* inject script */
try {
var script1 = document.createElement("script");script1.type = "text/javascript";script1.src = chrome.extension.getURL("/js/injected1.js");document.getElementsByTagName("head")[0].appendChild(script1);
var script2 = document.createElement("script");script2.type = "text/javascript";script2.src = chrome.extension.getURL("/js/injected2.js");document.getElementsByTagName("head")[0].appendChild(script2);
var script3 = document.createElement("script");script3.type = "text/javascript";script3.src = chrome.extension.getURL("/js/injected3.js");document.getElementsByTagName("head")[0].appendChild(script3);
var script4 = document.createElement("script");script4.type = "text/javascript";script4.src = chrome.extension.getURL("/js/injected4.js");document.getElementsByTagName("head")[0].appendChild(script4);
} catch(e) {}
manifest.json中的:
"content_scripts" : [{
"matches" : [ "http://*/*", "https://*/*" ],
"js" : [ "content.js" ],
"run_at" : "document_end"
}]