【问题标题】:IE9 only _sometimes_ ignores <base href>仅 IE9 _有时_ 会忽略 <base href>
【发布时间】:2011-12-16 10:15:10
【问题描述】:

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

我们的客户告诉我们,有时当她浏览新页面时,她会得到没有应用布局的页面内容。我们对此进行了调试:它只发生在 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受影响,其他浏览器都正常。

&lt;base href&gt; 标记是&lt;head&gt; 标记中的第一个。我们尝试了所有可能的解决方案,没有任何帮助。好像是IE的bug。

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

根据 cmets 的要求,这是我的 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>

【问题讨论】:

  • 你能添加一个暴露问题的简单例子吗?
  • 您应该删除评论或将其放在基础之后。将一堆内容放在 BASE 前面会增加在第一个前瞻线程中看不到它的可能性。 blogs.msdn.com/b/ieinternals/archive/2011/07/18/…
  • @Eric 我们通过更改 TYPO3 主模板并清除所有缓存来提升它。问题仍然存在。我更改了示例以反映这一点。
  • @EricLaw-MSFT-如果您说“增加可能性”,那么我认为这是一个错误。当问题发生时,IE9 从不尝试从正确的 URL 获取资源。它有时只是做错了,这就是那个页面会话。只有重新加载才能解决问题。从我们的日志中,我可以推断出使用 的其他站点也面临这个问题,尽管它访问这个新站点的速度只有一小部分。 PS:非确定性行为几乎总是软件错误。我不想在 IE 上玩 yahtzee,我希望它具有确定性。
  • @EricLaw-MSFT- 我们找到了!如果您想重现此行为,请将 BOM 包含到 html 输出中。在页面生成期间,包含了一个带有 BOM 的 PHP 文件,但在命中缓存的连续请求时不包含该文件。所以有时它会发生(第一次请求),大多数时候不会(连续请求)。是的,谢谢 IE,2 .5 天的工作丢失了! \o/

标签: html internet-explorer internet-explorer-9


【解决方案1】:

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

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

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

【讨论】:

  • 您能进一步解释一下吗?我的&lt;base&gt; 标签可以正常工作,除了 IE 上的 JS 中的window.location.href 调用。
  • 我无法确认此解决方案。我的文件没有 BOM,但在 IE 9 上完全忽略了 。但是在删除 之后,即使使用 BOM, 也会突然正常工作。更奇怪的是:我在我的应用程序的嵌入式 IE 控件中显示 Html 文档。当我在 VS 调试器中启动我的应用程序时,它可以与 一起使用,否则不能。
【解决方案2】:

如果您再次遇到此类问题,请考虑使用config.baseURL &gt; 删除base 标记,并使用绝对URL 呈现所有链接:

要么使用config.absRefPrefix = http://www.example.org/mysubfolder/(大多数保存变体)要么使用config.absRefPrefix = /

【讨论】:

  • 无济于事,这是一个不同的问题。它只适用于 IE 和 BOM... IE 在遇到 BOM 时应用 CSS 样式存在问题 - 但是,并非在每个请求中。实际上,当我们遇到问题时,我们甚至尝试过您的建议,但没有成功。如果你用谷歌搜索与 BOM 和 UTF-8 相关的 IE 问题,你会发现许多与 TYPO3 完全无关的类似报告。
【解决方案3】:

我怀疑您没有在标记中使用绝对路径。允许 IE 忽略您的标签,因为它没有正确指定。见http://www.w3schools.com/tags/tag_base.asp

【讨论】:

  • 我在基本 href 中使用绝对路径。看我的例子。我在任何地方都没有提到这条路径是相对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
相关资源
最近更新 更多