Chrome扩展内容脚本首先没有注入,如何调试?

时间:2011-12-21 11:59:24

标签: google-chrome-extension chromium

当我使用:

运行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.jss4.js成功注入。重新加载页面后,所有脚本都正确注入,我的扩展程序按预期工作。

原因是什么,以及如何调试?

修改

那些内容脚本(有时无法注入)在开头引用'document'。好像我把它们包装成类似的东西:

setTimeout(function() { document. ... }, 5000);

它们总是按预期注入。是否有可能该文档不可用,即使“run_at”:在清单中指定了“document_end”?

谢谢!

1 个答案:

答案 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"

}]