2011-12-21 78 views
2

当我使用运行Chromium浏览器:Chrome扩展内容脚本不是首先注入的,如何调试?

铬浏览器--load扩展= /路径/要/我的/扩展 的user-data-DIR = /路径/要/镀铬/ 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被成功注入。重新加载页面后,所有脚本都被正确注入,并且我的扩展按预期工作。

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

编辑:

那些内容的脚本(未能有时注入)开头引用“文档”。这似乎是如果我把它们包装成类似的东西:

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

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

谢谢!

+0

我注意到这个也是。我相信这是我无法使用JQuery的document.ready函数的原因。 – Soviut 2012-07-14 00:12:19

回答

1

您可以更好地做到这一点:在manifest.json中

/* 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) {} 

创建1个content.js脚本

"content_scripts" : [{ 
      "matches" : [ "http://*/*", "https://*/*" ], 
      "js" : [ "content.js" ], 
      "run_at" : "document_end" 

}]

相关问题