我们有一个动态广告,可通过Google双击加载到网站上.
我们在代码中使用了一些Jquery,因此作为设置的一部分,我们检查网站是否正在运行Jquery,如果不是,我们使用Javascript添加链接到我们的Jquery文件.
这样做很好但是我仍然收到一个错误"Uncaught ReferenceError: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);
}
Run Code Online (Sandbox Code Playgroud)
这是一个时间问题.当您像这样动态加载脚本时,它们会异步加载,并且不会阻止页面上进一步执行javascript.这意味着在运行jQuery特定代码时可能无法加载jQuery.
刷新时,js/jquery-1.8.3.min.js可能已缓存,因此加载速度更快,因此您不会看到错误.
解决方案是将javascript包装到一个函数中,该函数在jQuery使用load事件处理程序加载后调用.这是我从本教程改编的一个例子.
工作实例.
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();
}
Run Code Online (Sandbox Code Playgroud)
此外,正如一些评论员指出的那样,许多网站都在iframe中放置横幅广告,以防止广告"污染"您的网页.