我正在开发Chrome扩展程序。我正在向页面中注入脚本,并注入jquery以便在我的脚本中使用。
我添加了另一个名为Boomerang的扩展,从那时起,jquery就没有定义。到目前为止我尝试了什么:
myJquery = jQuery.noConflict();
有时是有效的,有时则不然。如果我在控制台中检查myJquery
它有时会存在,有时它是未定义的 - 所以$
或JQuery
也是如此。比赛条件?
jQuery.noConflict();
在等待注入所有资产的函数中(使用`setInterval进行检查直到找到它们)的工作方式相同 - 有时是有时没有。
我有点想法。 Boomerang似乎是问题的根源,但如果它出现在这里,它也可能与其他扩展一起发生。有没有一种方法我不知道将我的函数定义到他们自己的命名空间或类似的东西?
[编辑] 我反编译Boomerang的代码,发现他们使用与我完全相同的堆栈:Gmail.js和Jquery。在他们的代码中,我认为这里有错误:
function h() {
V = String(document.location);
"undefined" === typeof window.jQuery && 0 > V.indexOf("ContactManager") ? Eb =
setTimeout(h, 500) : (a = ia = window.jQuery.noConflict(!0), window.b4g.$ = a, setTimeout(Lc, 0), setTimeout(z, 0))
}
我真的不明白这个window.jQuery.noConflict(!0)
的含义,但看起来并不好......
答案 0 :(得分:0)
所以,我一直在努力。这就是我做的。我推迟了jQuery及其依赖项的注入,只注入了主脚本。使用递归的setTimeout,我可以通过使用自定义事件document.dispatchEvent(new CustomEvent("eventName", {}))
调用centent_script文件从注入的脚本本身注入jQuery。当content_script捕获到它时,它然后向页面注入jQuery,并调度我用来触发main函数的另一个自定义事件,插入所有我需要使用jquery愉快地插入到dom中!