我们有一个动态广告,可通过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);
}
答案 0 :(得分:6)
这是一个时间问题。当您像这样动态加载脚本时,它们会异步加载,并且不会阻止页面上进一步执行javascript。这意味着在运行jQuery特定代码时可能无法加载jQuery。
刷新时,js/jquery-1.8.3.min.js
可能已被缓存,因此加载速度更快,因此您看不到错误。
解决方案是将javascript包装到jQuery使用load
事件处理程序加载后调用的函数中。这是我从this tutorial改编的一个例子。
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();
}
此外,正如一些评论员指出的那样,许多网站都在iframe中放置横幅广告,以防止广告“污染”您的网页。
答案 1 :(得分:0)