0

晚上好。

我有一个覆盖站点的加载器,通过 css 转换(不透明度)淡出,当主体类更改为“已加载”时持续 1000 毫秒,然后一旦转换完成,我将其从 DOM 中删除。

我正在使用以下脚本,该脚本在 osx snow leopard/google chrome v28 中的所有内容中都可以正常工作,即使这样也仅适用于少数人-我的设置完全相同,我的客户和我能接触到的几乎所有人测试 - 它工作正常。

但是我有 2 或 3 个错误报告,其中加载程序没有从 DOM 中删除,因此它仍然覆盖其余内容并使其下的元素不可点击。一位用户甚至给我发了一段视频,确认加载器元素仍在 DOM 中。

脚本如下;我想知道我如何删除元素或 setTimeout 函数语法本身是否存在问题。

任何关于为什么这可能会失败的帮助将不胜感激,特别是考虑到我无法复制它!我在脚本中添加了注释来解释我期望它如何工作(以及它在很大程度上是如何工作的)。

var 
loaded = false,
_body = document.body,
loader = document.getElementById("loader"),
kill_loader = function() {
    if ( loader ) {
        loader.parentNode.removeChild(loader);
    }
},
cl = function() {
    // set loaded to true, add class to body that fades the loader, then remove the loader
    loaded = true;
    _body.className = _body.className + " loaded";
    // the above works as intended
    setTimeout(kill_loader,1000);
    // this last bit does not seem to work in rare instances as detailed. 
    // the timeout is so that the loader fully fades before being removed. 
};

window.onload = function() {
    if ( !loaded ) {
    // if loaded variable is false (i.e. cl() has not run), call the function to complete loading
        cl();
    }
};


setTimeout(function () {
    // if page still not loaded after 5 seconds, force the load
    if( !loaded ) {
        cl();
    }
},5000);

预先感谢您提供的任何帮助。

4

1 回答 1

0

好的,该解决方案与我的脚本本身无关,但由于安装的 chrome 插件(measureIt.js)正在杀死我的脚本。杰出的。

我已经成功地复制了安装插件的问题(不限于 OSX 或 chrome 版本),并添加了一个try catch用于删除加载程序的简单语句。

感谢 Crazy Train 帮助我整理语法 - 它使隔离问题变得更加容易。

于 2013-07-21T13:09:13.330 回答