Internet explorer 在IE8标准模式下为IE8中呈现的本地html文件使用基本元素时,缺少样式表/脚本/图像

Internet explorer 在IE8标准模式下为IE8中呈现的本地html文件使用基本元素时,缺少样式表/脚本/图像,internet-explorer,internet-explorer-8,ie8-browser-mode,Internet Explorer,Internet Explorer 8,Ie8 Browser Mode,我们有一些HTML页面(本地的,不在web服务器上),它们使用BASE元素来标识一个特定的基本目录,该目录包含一组常见的样式表和图像。下面是一个示例(页面存储在c:\temp\html\test.html中,资源目录为c:\temp\resources): 这在我测试过的所有当前浏览器(Firefox、Chrome、IE9)中都能正常工作,在IE8的怪癖模式下也能正常工作。但在IE8标准模式下运行的IE8中(此页面的默认值-在实际页面中是必需模式),任何样式表、脚本或图像引用都会被破坏-就

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


这在我测试过的所有当前浏览器(Firefox、Chrome、IE9)中都能正常工作,在IE8的怪癖模式下也能正常工作。但在IE8标准模式下运行的IE8中(此页面的默认值-在实际页面中是必需模式),任何样式表、脚本或图像引用都会被破坏-就好像元素被完全忽略一样

我尝试了元素的其他变体-
,以及各种不同的文件URL,例如。file:///c:/temp/resources/test.html 等等,以及基础的相对HREF,但似乎没有什么能说服图像/样式表/脚本加载

我知道上面的例子看起来很琐碎,但在我们的实际场景中,我们必须在IE8标准模式下加载IE8中的页面,并且必须设置一个特定的模式,因此我正在尝试找出一个解决方案,如果有


我确实在早期IE8版本中找到了一些关于该元素的bug的引用,但它们在很久以前被标记为修复,我正在一个干净的Windows 7虚拟机上进行测试,并应用了所有IE8更新。

不幸的是,IE8的标准模式似乎不能处理基本元素中的file://URI


如果您可以在本地页面中运行脚本,我建议您使用一些简单的javascript来循环所有外部元素(script、IMG、LINK、IFRAME、FRAME),并使用所需的基来修复任何无模式URI(不包含“:/”)

状态更新:使用:

下面是我在创建此解决方案时使用的过程,它允许IE8对本地文件使用Base属性

澄清:此经验证的解决方案适用于IE7、IE8和所有现代浏览器


参考屏幕截图:
在这里您可以看到,IE8地址栏不像其他现代浏览器那样工作:斜杠是反向的,没有看到
文件://
协议。但是,IE8将在页面刷新时在浏览器的状态栏中显示
文件://
协议

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

要了解可用的语法方法,查看本地Intranet的Internet选项(安全选项卡)将为我们提供该信息。这里实际上没有做任何更改,只是语法请:

在上图中,本地Intranet窗口确认需要反斜杠。

此外,它还显示
文件:\\
协议与此斜杠语法相关联。由于
文件://
协议是由IE8自动暗示的(前面提到的:请参阅浏览器的状态栏,注意斜杠是正确的!!)。

Base
标记中定义此
文件:
协议是一个问题。解决方案是不使用协议


参考链接1:

它不完全是轻阅读,但提供 对于省略协议(HTTP或HTTPS)的完全限定URL 总共如果省略URL的协议,浏览器将使用 而不是底层文档的协议


参考链接2:

*当然,如果您在本地查看该文件,它将尝试请求 具有
文件://
协议的文件


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


完成HTML标记|工作演示:


将基本标记与本地文件IE8和现代浏览器演示一起使用


谢谢您的回复。正如在文章中提到的,这个问题确实是IE8标准模式特有的。不幸的是,运行自定义脚本在我们的场景中不起作用-我们需要正确设置基础,以便动态添加页面内容、将脚本引用链接到相对URL等。所有这些都能按预期工作。@fubaar,我重写了我的答案,为您提供解决方案、详细解释和验证。干杯这是一个非常详细的信息——您是如何知道的???@ryandenki,很久以前我使用了
C:\website\project(ver1)\index.html
,它可以在除IE8之外的所有浏览器中正常工作,用于本地测试。事实证明,在IE8中,我的一些CSS被忽略了。我通过故障排除发现我使用了一个非法字符作为文件夹路径,其他浏览器很乐意忽略它,因此不再使用
。就在那时,我了解到本地文件和文件夹的IE8路径非常不同,并对该主题进行了仔细研究。很抱歉延迟回复-看起来我的StackOverflow通知不起作用,我刚刚发现了您的回复。非常感谢你
<!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>