在IE8标准模式下使用IE8渲染的本地html文件使用BASE元素时缺少样式表/脚本/图像

fub*_*aar 5 internet-explorer internet-explorer-8 ie8-browser-mode

我们有一些HTML页面(本地,而不是Web服务器),它们使用BASE元素来标识包含一堆常见样式表和图像的特定基目录.这是一个示例(页面存储在c:\ temp\html\test.html中,资源目录是c:\ temp\resources):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <base href="file:///c:/temp/resources/"></base>
    </head>
    <body>
        <p><img src="image.jpg" /></p>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这在我测试的所有当前浏览器(Firefox,Chrome,IE9)中运行良好,并且在Quirks模式下在IE8中工作正常.但是在IE8标准模式下运行的IE8(此页面的默认设置 - 以及实际页面中所需的模式),任何样式表,脚本或图像引用都被破坏 - 就好像元素被完全忽略一样.

我已尝试过该元素的其他变体 - <base href="file:///c:/temp/resources/">或者<base href="file:///c:/temp/resources/"/>以及各种不同的文件URL,例如file:/// c:/temp/resources/test.html等,以及基础的相对href,但似乎没有说服要加载的图像/样式表/脚本.

我知道上面的例子似乎微不足道,但在我们的实际场景中,我们必须在IE8标准模式下加载IE8中的页面,并且必须设置一个特定的,所以我真的想找到一个解决方案,如果有的话.

我确实发现了一些早期IE8版本中与该元素相关的错误的引用,但它们在很久以前被标记为修复,我在一个干净的Windows 7虚拟机上测试了这个,并且应用了所有IE8更新.

art*_*ics 9

状态更新:   使用:<base href="\\c:\temp\resources\" />

这是我在创建此解决方案时使用的过程,以允许IE8基本属性用于本地文件.

澄清一下:这个经过 W3C验证的解决方案适用于 IE7,IE8和所有现代浏览器!


参考截图::
在这里你可以看到IE8地址栏不工作像其他现代浏览器:在斜线逆转并没有file:///看到协议.但是,IE8会在页面刷新时file:///浏览器的状态栏中显示协议!

在此输入图像描述

参考屏幕截图:
由于IE8以不同方式处理本地文件,因此了解IE8协议file:///非常重要.

要实现什么样的语法方式可供选择,观看Internet选项(安全选项卡)本地Intranet将会给我们的信息.这里实际上没有做任何更改,只需要语法:

在此输入图像描述

在上面的照片中,本地Intranet窗口确认需要反斜杠.

此外,它显示该file:\\协议与此斜杠语法相关联.由于file:///协议是由IE8自动隐含的(之前提到过:请参阅浏览器的状态栏并注意斜杠是否正确!!).在标签中

定义此file:协议Base是个问题.解决方案是不使用协议!


参考链接1:无 协议URL方案:

它并不完全是轻量级读取,但RFC 3986的4.2节提供了完全限定协议(HTTP或HTTPS)的完全限定URL.当省略URL的协议时,浏览器将使用基础文档的协议.


参考链接2: 了解Paul Irish的网络路径参考:

*当然,如果您在本地查看文件,它将尝试使用file://协议请求文件.


上面的参考文献解释说,使用//将允许任何浏览器在访问文件或资产时使用当前已知的URL方案.由于IE8是游戏规则改变者,因为所有浏览器都会将其转换/解释为标准URL Scheme(隐含本地文件),包括浏览器IE7,因此使用\\而不是//将其用于Base标记!file:///


完整的HTML标记| 工作演示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Using Base Tag with Local Files IE8 and Modern Browser DEMO</title>

  <!-- The name of this file is:  test.html  -->
  <!-- The location of this HTML file on the hard drive is:  C:\temp\html\test.html  -->

  <!-- This unusually constructed Base attribute tag uses two rules to have it work for Locally Hosted IE8 Files that are not server based. -->
  <!-- First, the "URL Scheme" is based on "Network Path Reference" which means no Protocol is used. -->
  <!-- Second, the "forward slashes" are changed to "back slashes". It's the syntax IE8 actually expects. -->
  <!-- This entire method is also friendly for modern browsers showing these local files that are not server based. -->
  <base href="\\c:\temp\resources\" />

</head>
<body>

  <p>
    <!-- The location of this "image.jpg" on the hard drive is at:  C:\temp\resources\image.jpg  -->
    <img src="image.jpg" alt="image" />
  </p>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)