0

我们有一个动态广告横幅,它通过 Google Double Click 加载到网站上。

我们在代码中使用了一些 Jquery,因此作为设置的一部分,我们检查网站是否正在运行 Jquery,如果没有,我们使用 Javascript 将链接添加到我们的 Jquery 文件。

这做得很好但是我仍然收到一个错误“未捕获的 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);
 }
4

2 回答 2

6

这是一个时间问题。当您像这样动态加载脚本时,它们会异步加载,并且不会阻止页面上进一步执行 javascript。这意味着在运行您的 jQuery 特定代码时可能不会加载 jQuery。

当您刷新时,js/jquery-1.8.3.min.js可能已被缓存,因此加载速度会更快,因此您不会看到错误。

解决方案是将您的 javascript 包装到一个函数中,该函数在使用load事件处理程序加载 jQuery 后调用。这是我改编自本教程的示例。

工作示例

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 中放置横幅广告,以防止广告通过其库“污染”您的页面。

于 2013-07-26T12:52:06.800 回答
0

iFrame 可能是一个更好的方式去@flyersun

简单有效,看这里

http://support.microsoft.com/kb/272246

于 2013-07-26T13:12:10.173 回答