更新 Firefox 3 的 Web 应用程序
即将发布的 Firefox 3 中有一些更改可能会影响您的网站或 Web 应用程序,以及您可能想要利用的新功能。本文将作为您更新内容以充分利用 Firefox 3 的起点。
DOM 更改
来自外部文档的节点应使用 document.importNode()
(或使用 document.adoptNode()
采用)才能插入到当前文档中。有关 Node.ownerDocument
问题的更多信息,请参见 W3C DOM 常见问题解答。
Firefox 目前没有强制执行此规则(在 Firefox 3 的开发过程中强制执行了一段时间,但当强制执行此规则时,太多网站出现故障)。我们鼓励 Web 开发人员修复其代码以遵循此规则,以提高将来的兼容性。
HTML 更改
字符集继承的更改
Firefox 3 修复了框架和 iframe 中允许它们继承父级字符集的安全漏洞。这在某些情况下会导致问题。现在,框架只允许继承父级字符集,如果框架和父级都从同一服务器加载。如果您的页面假设从其他服务器加载的框架将继承相同的字符集,则应更新框架的 HTML 以明确指示其字符集。
对 SCRIPT 元素的更改
在 text/html
文档中,<script>
元素现在需要在 HTML 4 文档中使用结束标记 </script>
,即使您没有在两者之间包含任何内容。在以前的 Firefox 版本中,您可以执行以下操作:
<script … />
现在,标记必须符合 HTML 规范(如果它实际上是 HTML),因此您必须实际关闭它,如下所示:
<script …></script>
这提高了兼容性和安全性。
CSS 更改
基于 em、ex 单位的字体大小的更改
以前,em 和 ex 单位中的字体大小值会受到用户最小字体大小设置的影响:如果字体由于最小字体大小而显示得更大,则基于此字体的字体大小设置的 em 和 ex 单位将相应地放大。这与基于百分比的字体大小的行为不一致。
现在,em 和 ex 单位中的字体大小值基于不受用户最小字体大小影响的“预期字体大小”。换句话说,字体大小始终根据设计者的意图计算,并在之后针对最小字体大小进行调整。
请参见 Firefox 错误 434718,特别是其“非错误模板案例” - 以下链接指向 Bugzilla 附件,而不是 Bugzilla 错误;如果您将附件号用作错误号,它就变得毫无意义 附件 322943“非错误模板案例”用于演示(必须使用最小字体大小 >= 6 才能看到区别:两个框级联在 Firefox 2 中的行为不同,因为基于 em 的字体大小“反弹”最小字体大小)。
安全更改
Chrome 访问
在以前的 Firefox 版本中,任何网页都可以使用 chrome://
协议从 chrome 加载脚本或图像。除此之外,这使得网站可以检测到附加组件的存在——这可以通过绕过向浏览器添加安全功能的附加组件来破坏用户的安全性。
Firefox 3 仅允许 Web 内容访问 chrome://browser/
和 chrome://toolkit/
空间中的项目。这些文件旨在供 Web 内容访问。现在,所有其他 chrome 内容都被阻止从 Web 访问。
但是,扩展程序有一种方法可以使其内容对 Web 可访问。它们可以在其 chrome.manifest
文件中指定一个特殊标志,如下所示:
content mypackage location/ contentaccessible=yes
您不应该经常执行此操作,但对于那些需要它的罕见情况,它可用。请注意,Firefox 可能提醒用户您的扩展程序以这种方式使用 contentaccessible
标志,因为它确实构成潜在的安全风险。
注意:由于 Firefox 2 不理解 contentaccessible
标志(它将忽略包含标志的整行),如果您希望您的附加组件与 Firefox 2 和 Firefox 3 兼容,您应该执行以下操作:
content mypackage location/
content mypackage location/ contentaccessible=yes
文件上传字段
在以前的 Firefox 版本中,在用户提交要上传的文件时,文件的整个路径可供 Web 应用程序使用。此隐私问题已在 Firefox 3 中得到解决;现在,只有文件名本身可供 Web 应用程序使用。
在框架中使用远程 JAR
在框架中不再允许使用从其他域加载的 JAR 文件中的代码;这减轻了 潜在的攻击媒介。
对 file: URI 的同源策略的更改
Firefox 3 中对 file: URI 的同源策略进行了更改。这可能会影响您的内容;有关详细信息,请参见 file: URI 的同源策略。
JavaScript 更改
Firefox 3 支持 JavaScript 1.8。可能需要更新您的网站或应用程序的一个重要更改是,不再支持过时且非标准的 Script
对象。这不是 <script>
标签,而是一个从未标准化的 JavaScript 对象。您可能从未使用过此对象,因此您可能没问题。