IE9 中的 JavaScript 缓存问题?

标签 javascript caching hide internet-explorer-9 onload

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

我使用事件处理程序在页面完全加载时调用一些 JS,事件处理程序如下所示:

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() 函数中,我得到一个具有特定 id 的 div 元素,比如说“testdiv”,然后使用以下方法隐藏它: .style.display = "none";整行JS看起来像这样:

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

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

感谢您的帮助:)

最佳答案

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

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

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

要测试是否有这种情况,当DIV没有隐藏时,只需打开IE Dev工具,看看是否可以手动调用myFunc()

关于IE9 中的 JavaScript 缓存问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6069252/

相关文章:

java - 处理来自服务器端的条件 HTTP GET 请求的好方法是什么?也就是说,包含 "If-Modified-Since" header 的 GET 请求?

javascript - 如何在 Typescript 中连接字符串和数字

caching - Asp.net MVC中基于Url参数的缓存

javascript - CRM-从父实体的所有相关实体获取总字段

facebook - 如何清除调试工具缓存数据?

qt - Qt中setVisible、setShown和show/hide之间有什么区别

c++ - 如何检查文件夹或文件是否隐藏=

javascript - 如果子div为空则隐藏父div

javascript - 在 JavaScript 中序列化父对象中的子对象

java - 在 selenium RC 中过滤 javascript XHR 调用