gpt4 book ai didi

internet-explorer - 将 BASE 元素用于在 IE8 标准模式下在 IE8 中呈现的本地 html 文件时缺少样式表/脚本/图像

转载 作者:行者123 更新时间:2023-12-04 17:38:18 25 4
gpt4 key购买 nike

我们有一些 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>

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

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

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

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

最佳答案

状态更新:使用: <base href="\\c:\temp\resources\" />
这是我在创建此解决方案以允许 时使用的过程IE8 使用 基础属性 对于本地文件。
澄清一下:这个W3C经验证的解决方案适用于 IE7、IE8 和所有 现代浏览器 !

**引用截图:**:
在这里您可以看到 ***IE8 地址栏*** 不像其他现代浏览器那样运行:斜线是 ***反转的*** 并且没有看到 `file:///` 协议(protocol)。但是,**IE8** 会在页面刷新时在**浏览器的状态栏** 中显示 `file:///` 协议(protocol)!
enter image description here
引用截图:
IE8 正在以不同的方式处理本地文件,了解 IE8 file:/// 的协议(protocol)很重要。
要了解可用的语法方法,请查看 Internet 选项(安全选项卡)对于 本地内网会给我们这些信息。这里实际上没有进行任何更改,请仅使用语法:
enter image description here
在上面的照片中,本地内网窗口确认需要反斜杠。

此外,它表明 file:\\协议(protocol)与此 相关联斜线句法。自 file:/// 自动暗示协议(protocol)IE8 (之前提到过:请参阅浏览器的状态栏并注意斜线呈现正确!!)。

定义 file: Base 中的协议(protocol)标签是问题。解决方案是不使用协议(protocol) !

**引用链接 1:** [**无协议(protocol) URL 方案:**](http://encosia.com/cripple-the-google-cdns-caching-with-a-single-character/)
> 这不是简单的阅读,但 [**第 4.2 节 RFC 3986**][3] 提供
> 对于省略协议(protocol)(HTTP 或 HTTPS)的完全限定 URL
> 完全。当 URL 的协议(protocol)被省略时,浏览器使用
> 底层文档的协议(protocol)。

**引用链接 2:** [**了解 Paul Irish 的网络路径引用:**](http://paulirish.com/2010/the-protocol-relative-url/)

*Of course, if you're viewing the file locally, it'll try to requestthe file with the file:// protocol.



上面的引用资料解释了使用 `//` 将允许任何浏览器在访问文件或 Assets 时使用当前已知的 **URL Scheme**。由于 **IE8** 改变了游戏规则,使用 **`\\`** 而不是 `//` 将适用于 Base 标签,因为所有浏览器都会将其转换/解释为标准的 `file:///` URL Scheme(*隐含本地文件*),包括浏览器**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>

关于internet-explorer - 将 BASE 元素用于在 IE8 标准模式下在 IE8 中呈现的本地 html 文件时缺少样式表/脚本/图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11234172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com