使用javascript创建Jquery链接

时间:2013-07-26 12:40:01

标签: javascript jquery

我们有一个动态广告,可通过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);
 }

2 个答案:

答案 0 :(得分:6)

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

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

解决方案是将javascript包装到jQuery使用load事件处理程序加载后调用的函数中。这是我从this tutorial改编的一个例子。

working example

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)

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

简单易行,见到这里

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