IE9只_sometimes_忽略<base href =“”/>

时间:2011-10-27 10:59:34

标签: 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>的其他网站,我们无法在我们的测试系统中重现这种行为 - 所以有些东西可能触发或解决这个bug。但我分析了这些网站的日志,可以看到一些使用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>

3 个答案:

答案 0 :(得分:7)

我们发现:当从服务器返回的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天的无用工作!

答案 1 :(得分:1)

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

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

答案 2 :(得分:-1)

我怀疑你没有在标签中使用绝对路径。 IE未被正确指定,因此可以忽略您的标记。见http://www.w3schools.com/tags/tag_base.asp