我只想将jQuery注入Safari浏览器扩展的网页中。但仅限于某些页面,因为将jQuery添加为start/endscript会将其注入到所有页面,这会导致浏览速度变慢。 我尝试了通过创建使用其的onload功能的脚本标签:从Safari扩展中注入jQuery到网页
var node = document.createElement('script');
node.onload = function(){
initjquerycheck(function($) {
dosomethingusingjQuery($);
});
};
node.async = "async";
node.type = "text/javascript";
node.src = "https://code.jquery.com/jquery-2.0.3.min.js";
document.getElementsByTagName('head')[0].appendChild(node);
,以检查是否jQuery是加载使用:
initjquerycheck: function(callback) {
if(typeof(jQuery) != 'undefined'){
callback(jQuery);
}else {
window.setTimeout(function() { initjquerycheck(callback); }, 100);
}
}
但typeof运算(jQuery的)仍然是不确定的。 (使用console.log()检查)。 只有当我从调试控制台调用console.log(typeof(jQuery))时,它才返回'function'。任何想法如何解决这个问题?提前致谢!
你能在第一个选项扩展( “jQuery注入的页面以正常的方式”),你意思是通过'addContentScriptFromURL'? – meleyal
另外,如果注入的脚本有不同的命名空间,它如何访问'window'对象(即如何访问'window'而不是'$')?它似乎本质上是发布消息。 – meleyal
@meleyal,是的,我的意思是'addContentScript'和'addContentScriptFromURL'。关于注入的脚本如何访问窗口对象,在我看来,注入的脚本和页面自己的脚本就好像它们居住在两个不同的窗口中一样;人们可能会认为它们是碰巧在浏览器中占据相同空间的虚拟窗口。但是这些虚拟窗口共享相同的位置和来源,这就是为什么一个脚本可能将消息发送到另一个虚拟窗口的原因。 (他们也共享相同的DOM,但这与消息传递的目的不相关。) – canisbos