使用javascript创建Jquery链接

fly*_*sun 0 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);
 }
Run Code Online (Sandbox Code Playgroud)

cfs*_*cfs 6

这是一个时间问题.当您像这样动态加载脚本时,它们会异步加载,并且不会阻止页面上进一步执行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中放置横幅广告,以防止广告"污染"您的网页.