IE9中iframe里面的Javascript版本

时间:2011-10-04 16:14:42

标签: javascript internet-explorer iframe internet-explorer-9

我有一个将Outlook Web应用程序放在iframe中的Web应用程序。 这在大多数浏览器中运行良好,但在IE9中失败,在outlook的javascript中出错:

SCRIPT438: Object doesn't support property or method '__defineGetter__' 
uglobal.js, line 1 character 975667

似乎正在发生的事情是__defineGetter__函数已被弃用,并且在IE9中不存在,尽管大多数其他浏览器都支持它。邮件应用程序通常以IE7标准模式运行 - 如果我自己打开网络邮件并按F12(开发工具),我看到Browser Mode: IE9, Document Mode: IE7 standards并没有问题。

但是,当我在iframe中运行包含Outlook邮件的应用时,我会看到Browser Mode: IE9, Document Mode: IE9 standards。这适用于外部网站,没有明显的方法可以找出iframe在IE9中的呈现方式。

帧源具有我期望的标题:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "ht`tp://www.w3.org/TR/html4/strict.dtd">

看起来iframe中的JavaScript正在运行,就好像它不是版本一样。当然它仍然是孤立的,所以我不能按照this hack对这个函数进行monkeypatch。

如何强制iframe内容在IE7模式下运行JavaScript,与网站的其他部分不同?我们不想编辑iframe中的代码?我们不想这样做,因为它只是股票展望网络应用程序。如果我们必须去那里,我们只会修复他们的JavaScript而不是修复元数据。

3 个答案:

答案 0 :(得分:2)

我会根据我们今天所知道的问题回答我自己的问题。 我们基本上陷入了一些不受欢迎的特征的恶性互动中。

1)根据this post,IE9会忽略iframe中的网页文档类型,而是始终使用父网页的doctype。

  

IE9强制子页面与父页面相同的DOCTYPE。没有   有什么关系。 ......微软的回应是它按设计工作。

我希望有人可以确认或否认这些信息,一篇论坛帖子不多,但它符合我们所看到的。

2) MS Outlook Web应用程序2011版(版本:14.1.287.0)与Internet Explorer 9不兼容。要显示此信息,请尝试以下操作:查找正在运行的Outlook Web应用程序,例如http://mail.mycompany.com使用IE9连接到它。登录。按F12打开开发人员工具。请注意,在右上角,您有“文档模式:IE7标准”。 IE9正在模拟IE7以运行该站点。

您可以更改此模式:单击它并选择“文档模式:IE9标准”。请注意,控制台选项卡现在显示上面提到的有关缺少__defineGetter__方法的错误,并且Web应用程序的某些部分不起作用 - 单击列表中的消息或单击回复按钮现在不执行任何操作。

谢谢,Outlook团队没有使用标准,也没有针对您自己浏览器的当前版本。

3) __defineGetter__方法在IE9中不起作用。它已弃用,应改为使用defineProperty。这很公平,但__defineGetter__仍然存在于当前版本的Firefox和Chrome中,因此Outlook可以运行。在IE9中它不存在,除非IE9假装是IE的旧版本。

答案 1 :(得分:2)

您只需将此元数据放在页面/母版页中:

<meta http-equiv="X-UA-Compatible" content="IE=8" />

Xam666

答案 2 :(得分:0)

回顾这些。元标记可以提供帮助

http://blogs.msdn.com/b/askie/archive/2009/03/23/understanding-compatibility-modes-in-internet-explorer-8.aspx

文档适用于IE8。应该给IE9指点。

网页可以通过使用Meta标签或发送http标头来指定兼容模式。当两者都存在时,Meta标签优先于http标头。

1)META标签 - 您可以将以下HTML标签放在网页的HEAD元素中:

2)HTTP标头 - 您可以配置您的服务器,以便随每页发送以下HTTP标头

X-UA兼容:IE = 7