我正在使用Chrome扩展程序。我也需要检查URL是否在线。该URL向我返回了一个变量,因此,如果var为true,则该URL为在线。
如果URL处于脱机状态,则大约需要2秒钟的时间来处理错误,因此扩展弹出窗口需要2秒钟才能启动EVERYtime。
这是我的“旧”版本:
popup.html:
<script language="javascript" src="http://example.org/jdcheck.js"></script>
<script language="javascript" src="popup.js"></script>
popup.js:
if (variable) { [...] }
好吧,那很有效-2秒钟后。
现在我有了一个主意,因此我删除了popup.html中的脚本链接。这就是我的新popup.js:
background.$(document).ready(function() {
var jq = document.createElement('script'); jq.type = 'text/javascript';
jq.src = 'http://127.0.0.1:9666/jdcheck.js';
document.getElementsByTagName('head')[0].appendChild(jq);
if(jdownloader){
[...action]
}
});
您看,我使用jQuery加载Checkfile。
现在,它引发了一个错误:
Uncaught ReferenceError: jdownloader is not defined
好吧,看来createElement无法正常工作。我100%确信URL给了我想要的变量。
请你帮助我好吗?我不知道该怎么解决
谢谢!马库斯
编辑:我删除了jQuery部分,添加了keepGoing和jq.onload:
function keepGoing() {
console.log("JS should have been loaded");
if(jdownloader){
[action]
}
}
var jq = document.createElement('script');
jq.onload = keepGoing();
jq.src = 'http://127.0.0.1:9666/jdcheck.js';
document.getElementsByTagName('head')[0].appendChild(jq);
现在,控制台为我提供了这一点:
JS should have been loaded popup.js:98
Uncaught ReferenceError: jdownloader is not defined popup.js:100
因此,似乎jdownloader var没有传递给popup.js。为什么为什么?!我不知道。
马库斯
当您将脚本标签附加到DOM时,代码不会等待浏览器下载并评估脚本,然后再继续。
因此,您必须进行检查。在Chrome中,您可以load
在script
元素上使用事件。
background.$(document).ready(function() {
var jq = document.createElement('script'); jq.type = 'text/javascript';
jq.onload = keepGoing; // Or an anonymous inline function if you prefer
jq.src = 'http://127.0.0.1:9666/jdcheck.js';
document.getElementsByTagName('head')[0].appendChild(jq);
function keepGoing() {
if(jdownloader)...
}
});
(之所以选择“在Chrome上运行”,是因为在较旧版本的IE中,script
没有触发该load
事件,而是触发了该事件readystatechange
。)
旁注:如果为,则无需提供type
属性text/javascript
。这是默认值,并且一直都是默认值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句