使用javascript创建Jquery链接
我们有一个动态广告横幅,通过谷歌双击加载到网站上 我们在代码中使用一些Jquery,因此作为设置的一部分,我们检查网站是否正在运行Jquery,如果没有,我们使用Javascript向Jquery文件添加链接 这是做得很好,但我仍然得到一个错误“uncaughtreferenceerror:jQuery未定义”我假设这是由于加载的顺序,但我不确定如何绕过这个问题。如果你刷新页面,一切都正常。问题似乎只发生在第一次加载时 此外,如果我打开一个新的浏览器窗口并再次加载页面,一切正常 下面是我们用于将脚本标记添加到头部的代码:使用javascript创建Jquery链接,javascript,jquery,Javascript,Jquery,我们有一个动态广告横幅,通过谷歌双击加载到网站上 我们在代码中使用一些Jquery,因此作为设置的一部分,我们检查网站是否正在运行Jquery,如果没有,我们使用Javascript向Jquery文件添加链接 这是做得很好,但我仍然得到一个错误“uncaughtreferenceerror:jQuery未定义”我假设这是由于加载的顺序,但我不确定如何绕过这个问题。如果你刷新页面,一切都正常。问题似乎只发生在第一次加载时 此外,如果我打开一个新的浏览器窗口并再次加载页面,一切正常 下面是我们用于将
if(!window.jQuery)
{
var fm_j = document.createElement('script'); fm_j.type = 'text/javascript';
fm_j.src = 'js/jquery-1.8.3.min.js';
document.getElementsByTagName('head')[0].appendChild(fm_j);
}
这是一个时间问题。当您这样动态加载脚本时,它们是异步加载的,不会阻止页面上javascript的进一步执行。这意味着在运行特定于jQuery的代码时,jQuery可能不会被加载 刷新时,
js/jquery-1.8.3.min.js
可能已被缓存,因此加载速度会更快,因此不会看到错误
解决方案是将javascript封装到一个函数中,该函数在jQuery使用load
事件处理程序加载后调用。这是我改编的一个例子
此外,正如一些评论指出的那样,许多网站在iFrame中放置横幅广告,以防止广告“污染”其库的页面。这是一个时间问题。当您这样动态加载脚本时,它们是异步加载的,不会阻止页面上javascript的进一步执行。这意味着在运行特定于jQuery的代码时,jQuery可能不会被加载 刷新时,
js/jquery-1.8.3.min.js
可能已被缓存,因此加载速度会更快,因此不会看到错误
解决方案是将javascript封装到一个函数中,该函数在jQuery使用load
事件处理程序加载后调用。这是我改编的一个例子
此外,正如一些评论人士指出的那样,许多网站在iFrame内放置横幅广告,以防止广告“污染”其库中的页面。iFrame可能是@flyersun更好的方式 它简单、简单、有效,请参见此处
iFrame本可以是@flyersun更好的方式 它简单、简单、有效,请参见此处
您是否在添加cdn??“我们检查网站是否运行Jquery,如果没有,我们使用Javascript添加到Jquery文件的链接”-这样明智吗?如果页面已经有jQuery,因此您不添加自己的,但是已经包含的版本太旧或太新,无法与您的代码兼容,该怎么办?使用typeof,
if(typeof(jQuery)=“未定义”)
这样的广告难道不能作为iFrame插入吗?你正在加载80KB和数万个JS代码作为横幅--?你在添加cdn吗?“我们检查网站是否运行Jquery,如果没有,我们使用Javascript添加到Jquery文件的链接”-这样明智吗?如果页面已经有jQuery,所以你不添加你自己的,但是已经包含的版本太旧或太新,与你的代码不兼容怎么办?使用typeof,if(typeof(jQuery)==“undefined”)
这样的广告不会作为iFrame插入吗?你正在为一个横幅加载80KB和成千上万的JS代码?
function getScript(success) {
var fm_j = document.createElement('script');
fm_j.type = 'text/javascript';
fm_j.src = 'js/jquery-1.8.3.min.js',
done = false;
// Attach handlers for all browsers
fm_j.onload = fm_j.onreadystatechange = function () {
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
done = true;
// callback function provided as param
success();
};
};
document.getElementsByTagName('head')[0].appendChild(fm_j);
};
if(!window.jQuery) {
getScript(doSomething);
} else {
doSomething();
}