html - IE9 只_有时_忽略 <base href>

标签 html internet-explorer internet-explorer-9

我们正在开发一个大量使用 <base href> 的网站(这是典型的 TYPO3 网站)。该站点在子目录中开发,稍后将重新定位到顶级目录,因此我们无法轻易删除 <base href> .

我们的客户告诉我们,有时当她浏览新页面时,她会看到没有应用布局的页面内容。我们调试了这个:它只发生在 IE9 中。查看日志,我们发现当错误发生时,IE9 尝试从错误的位置加载 CSS、JS 和所有图像:相对于当前 URL,而不是相对于 BASE HREF...进一步检查日志显示我们IE8 用户也受到影响,包括一些愚蠢的网络蜘蛛(对我们来说后者没有问题,谁在乎?)。

我们已经知道 IE8 推测下载器/先行解析器:http://blogs.msdn.com/b/ieinternals/archive/2009/07/27/bugs-in-the-ie8-lookahead-downloader.aspx

我确定我们不会遇到那里描述的错误:所有页面元素(包括第一个标题元素)都从错误的位置加载。这个错误描述了只有页面标题中的第二个和后面的元素受到影响。我们可以通过查看问题发生时的访问日志来证明这一点。

一个简单的重新加载就解决了这个问题,将页面源代码与发生的错误和没有发生的错误进行比较,完全没有区别。仅 IE 受影响,其他所有浏览器均正常。

<base href>标记是 <head> 中的第一个标签。我们尝试了所有可能的解决方案,但没有任何帮助。似乎是 IE 错误。

还有其他人遇到过这种情况并找到了解决方法吗?我们还有其他几个网站使用 <base href>我们无法在我们的测试系统中重现此类行为 - 因此可能触发或解决了此错误。但我分析了这些网站的日志,发现一些使用 IE8 的访问者即使在那里也遇到了这个错误。

根据评论中的要求,这是我的 html 头部的混淆示例:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>

<base href="http://client.site/cms/" />

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- 
    This website is powered by TYPO3 - inspiring people to share!
    TYPO3 is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.
    TYPO3 is copyright 1998-2011 of Kasper Skaarhoj. Extensions are copyright of their respective owners.
    Information and contribution at http://typo3.com/ and http://typo3.org/
-->

<meta name="generator" content="TYPO3 4.5 CMS" />

<link rel="stylesheet" type="text/css" href="typo3temp/stylesheet_fad97d0aa7.css?1312295592" media="all" />
<link rel="stylesheet" type="text/css" href="fileadmin/css/styles.css?1319535102" media="screen" title="Standardstyles" />
<link rel="stylesheet" type="text/css" href="fileadmin/js/fancybox/jquery.fancybox-1.3.4.css?1310653643" media="all" />
<link rel="stylesheet" type="text/css" href="fileadmin/js/jqtransformplugin/jqtransform.css?1312810052" media="all" />

<script src="fileadmin/js/jquery-1.6.2.min.js?1310979164" type="text/javascript"></script>
<script src="fileadmin/js/jqtransformplugin/jquery.jqtransform.js?1312460310" type="text/javascript"></script>
<script src="typo3temp/javascript_93553eae97.js?1312462864" type="text/javascript"></script>

<link href="fileadmin/css/print.css" rel="stylesheet" media="print" type="text/css" />    
  <script src="/tools/formmailer.js" type="text/javascript" charset="utf-8"></script><title>Some title for the page</title>

</head>

最佳答案

我们发现:当从服务器返回的 HTML 文件包含 UTF-8 BOM 时,Internet Explorer 会做各种有趣的事情。我们仍然认为这是一个 IE 错误,但至少我们找到了解决方法。

背景信息:在初始页面生成期间,一些包含的 PHP 文件在后续请求中不包含(因为大多数生成的内容现在已缓存,不需要运行这些文件)。其中一些包含的 PHP 文件包含 UTF-8 BOM。因为 BOM 出现在开始的 PHP 标记之前,所以它被流式传输到 PHP 的输出。

当错误发生时,我们通过比较 fiddler 中的输出和文件大小相差 3、6 或 9 个字节来解决这个问题。在输出上运行差异显示 BOM header ,在大多数 Windows 编辑器中进行比较并没有显示它,因为这些编辑器知道 BOM。所以问题就隐藏起来了。感谢 IE 2.5 天的无用功!

关于html - IE9 只_有时_忽略 <base href>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7914922/

相关文章:

javascript - 来自表单值的 Canvas 宽度和高度

html - "booktabs"类似 Markdown 的表格

html - 有没有办法解决 IE10&9 更宽的字体渲染差异?

javascript - jQuery 下拉列表不显示第一个选项

.net - 向 Internet Explorer 9 添加按钮

html - 为不同的浏览器更改 CSS

html - 网页标题问题

javascript - 为什么在这个简单的 Angular 示例中,Angular 似乎没有定义?

css - svg 无法在 ie9 中使用 css 调整大小

javascript - XMLHttpRequest 仅在 Internet Explorer 中花费很长时间