Internet explorer 在IE8标准模式下为IE8中呈现的本地html文件使用基本元素时,缺少样式表/脚本/图像
我们有一些HTML页面(本地的,不在web服务器上),它们使用BASE元素来标识一个特定的基本目录,该目录包含一组常见的样式表和图像。下面是一个示例(页面存储在c:\temp\html\test.html中,资源目录为c:\temp\resources):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中(此页面的默认值-在实际页面中是必需模式),任何样式表、脚本或图像引用都会被破坏-就
这在我测试过的所有当前浏览器(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>