我使用内容脚本(此处提到的技术)将两个.js文件(例如a.js和b.js)注入到网页中:
function injectScript(file, node) {
var th = document.getElementsByTagName(node)[0];
var s = document.createElement('script');
s.setAttribute('type', 'text/javascript');
s.setAttribute('src', file);
th.appendChild(s);
}
injectScript( chrome.extension.getURL('/js/my_file.js'), 'body');
两次脚本注入均成功。现在,“ a.js”具有一个称为FuncA(){}的函数。现在,当我尝试从b.js调用FuncA()时,出现以下错误。
b.js:6 Uncaught ReferenceError: FuncA is not defined
一个适当的处理这种方式是依靠回调,不是任意的超时。
function injectScript(file, node, callback) {
var th = document.getElementsByTagName(node)[0];
var s = document.createElement('script');
s.setAttribute('type', 'text/javascript');
s.setAttribute('src', file);
if (typeof callback == "function") {
s.onload = function() { callback(); };
}
th.appendChild(s);
}
injectScript( chrome.extension.getURL('/js/a.js'), 'body', function() {
injectScript( chrome.extension.getURL('/js/b.js'), 'body');
});
使用任意选择的500ms延迟,您可能会面临等待时间过长或在某些极端情况下等待时间不足的风险。通过依靠onload
脚本标记的事件,您可以确切地知道它何时完成执行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句