使用基本元素在IE8标准模式在IE8渲染的本地HTML文件时丢失的样式表/脚本/图片(Missing

2019-06-25 20:11发布

我们有一些HTML页面(本地,而不是Web服务器上)使用BASE元素来标识包含了一堆常见的样式表和图像的特定基本目录。 下面是一个例子(页面保存在C:\ TEMP \ HTML \ test.html中,资源目录为C:\ TEMP \资源):

<!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>

在我所测试的所有主流浏览器(火狐,Chrome,IE9)工作正常,并在怪癖模式在IE8中正常工作。 但在IE8下IE8标准模式下运行(默认此页 - 在真实页是需要的模式)的任何样式,脚本或图像引用被打破 - 这是因为如果该元素被完全忽略。

我已经试过元件上其它变型- <base href="file:///c:/temp/resources/"><base href="file:///c:/temp/resources/"/>以及各种不同的文件的URL,例如文件:/// C:为基础,但没有/temp/resources/test.html等,也相对的HREFs似乎说服图像/样式表/脚本加载。

我知道,上面的例子似乎微不足道,但在我们的现实场景中,我们必须在IE8标准模式加载在IE8的页面和必须设置一个专用的,所以我真的试图找出一个解决方案,如果有一个。

我也打开了一个bug一些参考中有关元素早IE8版本,但它们标记为前一段固定和我应用了所有IE8的更新上一个干净的Windows 7虚拟机测试此。

Answer 1:

状态更新:使用: <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: 保罗爱尔兰的了解网络路径参考:

*当然,如果你正在查看本地文件,它会尝试请求该文件与file://协议。


上面的引用说明,使用//将允许任何浏览器来访问文件或资产时,使用目前已知的URL方案 。 由于IE8是改变游戏规则,使用\\而不是//将工作的基本标记,因为所有的浏览器将其转换/解释,作为标准file:/// URL方案( 本地文件暗示 ),包括浏览器IE7!


完整的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>


Answer 2:

不幸的是,它看起来像IE8的标准模式不处理文件:// URI的在基础元件。

如果您可以在本地网页中运行的脚本,我建议你使用一些简单的JavaScript来遍历所有的外部因素(SCRIPT,IMG,LINK,IFRAME,FRAME),并修复了任何计划少的URI(那些,唐您想要使用的BASE):“T包含 “//”。



文章来源: Missing stylesheets/scripts/images when using BASE element for a local html file rendered in IE8 in IE8 standards mode