【问题标题】:Javascript Caching Problem in IE9?IE9 中的 Javascript 缓存问题?
【发布时间】:2011-05-20 17:19:42
【问题描述】:

我在使用 Javascript 隐藏元素时遇到问题。

当页面完全加载时,我正在使用 Eventhandler 调用一些 JS,Eventhandler 看起来像这样:

if (window.addEventListener) {
    window.addEventListener("click", _onclick_handler, false);
    document.addEventListener("DOMContentLoaded", _onload_handler, false);
    window.addEventListener("resize", _onresize_handler, false);
    window.addEventListener("keyup", _onkeyup_handler, false);
}
else if(document.attachEvent) {
    document.attachEvent('onclick', _onclick_handler);
    window.attachEvent('onload', _onload_handler);
    window.attachEvent('onresize', _onresize_handler);
    document.attachEvent('onkeyup', _onkeyup_handler);
}

function _onclick_handler() {

}

function _onload_handler() {
    myFunc();
}

function _onresize_handler() {

}

function _onkeyup_handler() {

}

在 myFunc()-function 中,我得到一个具有特定 id 的 div 元素,比如说“testdiv”,然后使用以下命令隐藏它: .style.display = "none"; JS的整行是这样的:

document.getElementById("testdiv").style.display = "none;

这在 IE6-IE8 和所有其他常见浏览器中就像一个魅力,但在 IE9 中,如果我第一次查看页面,div 不会隐藏。如果我刷新页面,则 div 将被隐藏!那么这种情况下有什么问题呢?!

感谢您的帮助:)

【问题讨论】:

    标签: javascript caching hide internet-explorer-9 onload


    【解决方案1】:

    myFunc() 和 eventListeners 是按什么顺序和文件定义的? DOMContentLoaded 在加载任何外部资源之前触发。 事件和myFunc() 的定义之间可能存在竞争条件,这取决于页面是来自缓存(更快)还是来自服务器(更慢)。

    另外,我也遇到过 IE 和 JS 缓存问题(请参阅我的问题 5717206),其中脚本生成的动态内容只会在刷新页面后呈现。

    原来 IE 认为它已经缓存了整个页面,而实际上它以某种方式错过了我的一些脚本。因此,当从缓存渲染时,它无法加载文件并默默地忽略它们。它有助于将一些随机查询参数附加到 JS URL,以便 IE 认为它们是动态的并且不会尝试缓存它们。

    测试你是否有这种情况,在DIV没有隐藏的情况下,直接打开IE开发工具看看能不能手动调用myFunc()

    【讨论】:

    • 谢谢回答!首先,加载 myFunc(),然后加载 EventListener。如果我手动调用 myFunc,则 div 会消失...废话 IE9:D
    • 确实是废话!这些外部文件本身是什么?也许事件已经以某种方式触发了?
    猜你喜欢
    • 2011-10-31
    • 1970-01-01
    • 2016-09-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多