jQuery.卸载期间发射 - 任何防止这种情况的方法



我有一个页面,可以通过 defer加载一些外部脚本:

 <script src="externalPlugin.js" defer></script>

i然后在jquery.ready中有一些代码,可以调用该脚本的内容

$(function() {
    $.externalPlugin();
});

到目前为止,它有99.9%的时间。

问题

如果用户远离页面(命中"刷新",或者只是快速导航到另一页(> externalScript仍在加载/执行 - jQuery.ready仍然被调用(!(,显然是称为(!(引发此错误:$.externalPlugin is not a function或类似。

我该如何战斗?

我尝试添加一个beforeunload处理程序,该处理程序删除ready绑定

window.addEventListener("beforeunload",function() { $(document).unbind("ready"); });

但行不通。

这不是一个大问题(在所有用户都在导航之后,他不在乎任何错误(,但这仍然是有趣的行为。

update

是的,我知道我可以等待定义甚至使用<script defer onload='whatever()'>,但我想知道是否有一种"全局"方法可以普遍修复此操作 - 如果页面已卸载,则不请致电.ready。...如果不是 - 我会说这实际上是一个错误,必须向jQuery团队报告,嗯?

如果您必须在DOM准备的主页上启动脚本,请删除脚本的延期属性:

 <script src="externalPlugin.js"></script>

您可以等待功能définition:

function wait(fn, delay)
{
    var i = setInterval(function(){
        if(fn() && typeof fn() == "function")
        {
            clearInterval(i);
            fn()();
        }
    }, delay);
}
$(document).ready(function(){
    wait(function(){ return $.externalPlugin }, 100);
});

等到脚本加载

$(function() {
    waitPlugin();
});
function waitPlugin(){
    if( $.externalPlugin == null  ) {
        setTimeout(waitPlugin,1000);
        return;
    }
    $.externalPlugin();
}

,但我会以某种方式重组代码。

相关内容

最新更新