我试图通过外部js文件将两个js / jquery文件注入网页。
为了使它能够工作,我将需要注入一个jQuery框架(它在页面中不存在)和后续注入我自己的js文件。
为了使这项工作,我一直在尝试生成一个jquery注入器,但最终使用了一个由Karl Swedberg(http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet)
当你从文件中删除不需要的东西(至少我是这么认为)并根据我的需要调整它时,我得到:
(function() {
var el=document.createElement('div'),
b=document.getElementsByTagName('body')[0];
otherlib=false;
if(typeof jQuery!='undefined') {
//msg='This page already using jQuery v'+jQuery.fn.jquery;
}
else if (typeof $=='function') {
otherlib=true;
}
// more or less stolen form jquery core and adapted by paul irish
function getScript(url,secondaryScripts, success){
var script=document.createElement('script');
script.src=url;
//if (secondaryScripts)
// script.appendChild(document.createTextNode('var jQuery = jQuery.noConflict();'));
var head=document.getElementsByTagName('head')[0],
done=false;
// Attach handlers for all browsers
script.onload=script.onreadystatechange = function(){
if ( !done && (!this.readyState
|| this.readyState == 'loaded'
|| this.readyState == 'complete') ) {
done=true;
success();
script.onload = script.onreadystatechange = null;
head.removeChild(script);
}
}
;
head.appendChild(script);
}
getScript('http://code.jquery.com/jquery-latest.min.js',false, function() {
if (typeof jQuery=='undefined') {
//msg='Sorry, but jQuery wasn\'t able to load';
}
else {
if (otherlib) {
//msg+=' and noConflict(). Use $jq(), not $().';
$jq=jQuery.noConflict()
}
}
});
getScript('jquery-ui-1.8.16.custom.min.js', true, function() {});
getScript('script-20111006-1516.js', true, function() {});
}
)();
但它没有工作,并且firebug报告没有定义jquery。这似乎是正确的,因为即使在这个似乎有用的脚本中我也无法执行任何jquery。
在我的外部文件中,包装:
(function($,
})(jQuery);
因为我试图让我的脚本不与已经运行的任何东西发生冲突。但我也可能在这里做错了一些事情:)
希望有人能帮助我朝着正确的方向前进。
此致 丹尼斯
答案 0 :(得分:1)
解决方案是在jquery完全加载后注入脚本。