我根本不明白这一点。这里有一些Javascript代码可以在每个浏览器中运行,但是IE 9.它是使用ExternalInterface
从Flash电影中调用的,如果电影的大小在内部发生变化,则可以动态调整DOM中的电影大小
function vResizeFlash(swfId, ht) {
document.getElementById(swfId).height = "100%";
document.getElementById('flashContainer').style.height = ht + "px";
}
但是,如果我改变文档,它可以正常工作。标题:
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的死代码卸载?”
我不知道这一点,所以我去了Google搜索并找到了关于该主题的this article,以及其他地方的some discussion。我不知道如何评估它会如何影响两行Javascript函数,但是,特别是因为其中一行在页面上有一个引用(尽管它是通过SwfObject代码进行后期加载)。但是,代码“优化器”删除它认为不必要的代码行是一个非常糟糕的错误,因为它不了解它们的调用方式。如果确实无法理解如何调用这些行,那么如何将伪造的行更改为document.title会使该代码突然变得“必要”?
更新2
另一个难题这可能与IE 9的兼容模式有关。该页面以IE 9的标准模式开始。
现在,如果我打开IE的兼容模式,
如果不使用上述黑客,问题就会消失。关闭它,然后问题返回(如果没有黑客存在)。
但是当我尝试使用完全相同的HTML(减去几个JSP标记)和一个仅包含调整大小代码和测试工具的精简版SWF进行简单测试时,一切正常。但是,在那个的情况下,根本没有显示兼容性图标。
我们正在使用Tomcat 6.0.32。我不知道我们正在使用任何特殊标头,并且没有关于IE兼容模式的元标记(在主应用程序或我的测试应用程序中)。
答案 0 :(得分:2)
您也可以使用下面的链接强制使用兼容模式。
来自: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兼容标头不区分大小写;但是,它必须出现在除了title元素和其他元元素之外的所有其他元素之前的网页标题(HEAD部分)中。“
答案 1 :(得分:2)
每当我看到这样的事情发生在任何语言时,都是因为还有其他代码存在错误。正如您所指出的,您的简单案例不会产生问题。尝试一次删除几行代码直到问题消失 - 最后删除的代码应该包含问题。
干杯