javascript - 从 Chrome 扩展 : concurrency issue? 在页面中注入(inject) Javascript

标签 javascript jquery google-chrome google-chrome-extension

我正在参与 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/

相关文章:

javascript - Angularjs 多个 HTTP POST 请求导致 net::ERR_INSUFFICIENT_RESOURCES

javascript - 火狐插件。如何判断数组元素是文件还是目录?

javascript - 您可以使用 Jquery 来模拟选择列表中某个项目的点击事件吗?

javascript - 如何在函数注释中描述返回的 promise ?

javascript - 如何将删除按钮添加到脚本中表的行中?

javascript - jQuery:val() 是否足够快以重复使用,还是将值放在变量中更好

jquery - Bootstrap 下拉菜单的自定义样式

javascript - 通过开发人员工具检查页面中的所有复选框

html - 使用 Chrome 防止水平触摸板在 macbook 上滚动?

javascript - AngularJS $resource only 不会返回数据