我们有一些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虚拟机测试此。
状态更新:使用: <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>
不幸的是,它看起来像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