IE9 中的 JavaScript 缓存问题?

发布于 2024-11-08 08:24:21 字数 1110 浏览 0 评论 0原文

我在使用 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 就会被隐藏!那么这种情况下有什么问题吗?

谢谢你的帮助:)

i have a problem using a Javascript to hide an element.

I'm using an Eventhandler to call some JS when the page is completely loaded, the Eventhandler looks like this:

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() {

}

In myFunc()-function i get a div-element with a specific id, lets say "testdiv", and then hide it by using: .style.display = "none"; The whole line of JS looks like this:

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

This works like a charm in IE6-IE8 and all other common Browsers, but in IE9 the div isnt hidden if i view the page the FIRST time. If i refesh the Page, the div is hidden! So whats the problem in this case?!

Thx for helping :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

江湖正好 2024-11-15 08:27:42

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

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

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

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

In which order and files are the myFunc() and the eventListeners defined? DOMContentLoaded fires before any external resource is loaded.
There could be a race condition between the event and the definition of myFunc(), dependent on wether the page comes from cache (faster) or from server (slower).

Also, I've had my share of IE and JS caching problems (see my question 5717206) where the dynamic content generated by script would only be rendered after Refreshing the page.

Turned out that IE thought it had cached the whole page, while it actually had somehow missed some of my scripts. So when rendering from cache it could not load the files and silently ignored them. It helped to append some random query params to the JS URLs so that IE would think them dynamic and won't try to cache them.

To test if you have this scenario, when the DIV is not hidden, simply open IE Dev tools and see if you can manually call myFunc().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文