我正在参与 Chrome 扩展程序的开发。
在某些时候,我们需要运行一些静态的非生成代码,这些代码必须在页面而不是扩展的上下文中运行。
对于简单的脚本,没有问题,使用 $.getScript(chrome.extension.getURL(....))
或者 script = document.createElement('script' ); ... document.body.appendChild(脚本);
对于更复杂的脚本,我们有时需要包含 jquery 本身或其他一些脚本定义(因为依赖关系)。
尽管在后一种情况下,尽管 Javascript 应该是单线程的,但似乎在运行依赖脚本时 JQuery 并未完全解析,导致以下情况
Uncaught ReferenceError: $ is not defined
假设 JScript 是单线程的,我错了吗? 当这些脚本之间存在依赖关系时,在页面中注入(inject)脚本的正确方法是什么? (例如,脚本 X 使用脚本 Y 中定义的函数)
最佳答案
您可以为脚本使用 onload 事件....
function addScript(scriptURL, onload) {
var script = document.createElement('script');
script.setAttribute("type", "application/javascript");
script.setAttribute("src", scriptURL);
if (onload) script.onload = onload;
document.documentElement.appendChild(script);
}
function addSecondScript(){
addScript(chrome.extension.getURL("second.js"));
}
addScript(chrome.extension.getURL("jquery-1.7.1.min.js"), addSecondScript);
关于javascript - 从 Chrome 扩展 : concurrency issue? 在页面中注入(inject) Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9851559/