gpt4 book ai didi

javascript - 非常奇怪的 IE 9 Javascript 错误 : Altering doc title makes subsequent code execute

转载 作者:IT王子 更新时间:2023-10-29 03:04:44 25 4
gpt4 key购买 nike

这个我完全不懂。这是一些 Javascript 代码,适用于除 IE 9 以外的所有浏览器。它是使用 ExternalInterface 从 Flash 电影中调用的,旨在在电影大小发生内部变化时动态调整 DOM 中电影的大小

function vResizeFlash(swfId, ht) {
document.getElementById(swfId).height = "100%";
document.getElementById('flashContainer').style.height = ht + "px";
}

但是如果我改变 document.title 就可以正常工作:

function vResizeFlash(swfId, ht) {
// IE 9 won't run the rest of this function unless
// we go through the charade of changing the document title.
if (navigator.appName.indexOf("Microsoft") != -1) {
var docTitle = document.title.replace(/^(.+?)\s*$/,"$1");
document.title = docTitle + " ";
}
// Well-coded browsers begin here
document.getElementById(swfId).height = "100%";
document.getElementById('flashContainer').style.height = ht + "px";
}

在这里,我简单地从 document.title 的右侧删除所有空白,然后向其中添加一个空白字符。突然以下几行被执行。注意:页面上还有其他 ExternalInterface 调用,它们都工作正常,即使在 IE 9 中也是如此,所以这不是 Flash/IE 9 的问题。

我无意中找到了修复程序,因为我正在更改标题以显示函数参数(作为快速调试测试),只是为了确保函数正在运行。突然间代码起作用了。把它拿出来?不起作用。 100% 可重现。

有人知道为什么会发生这种绝对令人目瞪口呆的行为吗?

更新

@c69 提出了这个问题:“也许它的 IE9 的死代码删除器?”

我不知道这件事,所以我去谷歌搜索并找到了 this article关于这个话题,以及some discussion它在别处。然而,我对它的了解还不足以评估这将如何影响两行 Javascript 函数,尤其是因为其中一行确实在页面上有一个引用对象(尽管它是通过 SwfObject 代码延迟加载的)。尽管如此,对于代码“优化器”来说,删除它认为不必要的代码行是一个非常糟糕的错误,因为它不理解它们是如何被调用的。如果它确实无法理解这些行是如何被调用的,那么插入一行对 document.title 进行虚假更改如何使该代码突然变得“必要”?

更新 2

另一 block 拼图 这可能与 IE 9 的兼容模式有关。该页面以 IE 9 的标准模式启动。

enter image description here

现在,如果我打开 IE 的兼容模式,

enter image description here

不使用上述 hack 问题就消失了。将其关闭,问题再次出现(如果不存在黑客攻击)。

但是,当我尝试使用完全相同的 HTML(减去几个 JSP 标记)和仅包含调整大小代码和测试工具的精简 SWF 进行简单测试时,一切正常。然而,在那种情况下,根本不显示任何兼容性图标。

enter image description here

我们使用的是 Tomcat 6.0.32。我不知道我们使用了任何特殊的 header ,并且没有关于 IE 兼容模式的元标记(在主应用程序或我的测试应用程序中)。

最佳答案

就像 InvertedSpear 提到的那样,检查你的文档类型,我最近遇到了 IE9 的问题,其中大部分归结为 Doc 类型标签触发了我不需要的兼容模式,meta 也是如此标记,因此它可能归结为您的元标记。

您也可以随时使用下面的链接强加一个工作兼容模式。

来自:http://evolpin.wordpress.com/2011/02/25/ie9-compatibility-and-the-meta-tag/

我发现这确实被微软记录了......

http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx

“X-UA-Compatible header 不区分大小写;但是,它必须出现在除标题元素和其他元元素之外的所有其他元素之前的网页标题(HEAD 部分)中。”

关于javascript - 非常奇怪的 IE 9 Javascript 错误 : Altering doc title makes subsequent code execute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7491790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com