gpt4 book ai didi

javascript - IE 测试 Javascript "Browser Mode" "Document Mode"让我发疯!是浏览器兼容性问题还是怎么回事

转载 作者:行者123 更新时间:2023-12-02 19:10:42 25 4
gpt4 key购买 nike

这里需要干预,因为我对此几乎失去了理智 0_o

我正在使用 IE 9 并使用 IE 的 F12 开发人员工具,尝试测试 IE8。我正在使用 JavaScript 执行一项非常简单的任务。

我正在抓取一些内部 html - 无论出于何种原因将其用作诱饵。

像这样:

<div id="Some_Container_div">

<div class="Some_Inner_Div_Class">sometext</div>
<div class="Some_Inner_Div_Class">sometext</div>
<div class="Some_Inner_Div_Class">sometext</div>

</div>


<script>

var Div_Contaiers_Inner_Html_As_String = document.getElementById('Some_Container_div').innerHTML;

alert(Div_Contaiers_Inner_Html_As_String);

Array_Of_Divs = Div_Contaiers_Inner_Html_As_String.split("</div>");

alert(Array_Of_Divs);

</script>
<小时/>

上面的代码正确地发出警报:第一:

<div class="Some_Inner_Div_Class">sometext</div><div class="Some_Inner_Div_Class">sometext</div><div class="Some_Inner_Div_Class">sometext</div>

然后第二个警报正确的数组:

<div class="Some_Inner_Div_Class">sometext,<div class="Some_Inner_Div_Class">sometext,<div class="Some_Inner_Div_Class">sometext,
<小时/><小时/>

如果我现在使用开发人员工具 (f12) 并切换到“浏览器模式”IE8,并将“文档模式”也切换到 IE8,浏览器现在会发出警报:

第一:

<DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV>
  • 现在注意到缺少的引号了吗?
  • 现在注意到“DIV”一词的大写了吗?

接下来它会发出同样的警报:

<DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV>

所以看起来它现在甚至没有将字符串分割成数组 - 不知道为什么,就像它不再是一个字符串一样。

如果我现在使用开发人员工具 (f12) 并保留“浏览器模式”IE8,并将“文档模式”也切换到 IE9 - 它会再次正常工作......

非常感谢比尔·盖茨再次让我困惑 0_O

无论如何 - 所以我在这里寻求帮助 - 我看到有些人说在使用开发人员工具进行测试时应该将“浏览器模式”切换到 IE8,并将“文档模式”也切换到 IE8 - 但我没有看到解释明白为什么。如果只切换其中之一或两者,有什么区别。

同时:

  • 谁能告诉我这是否能在 IE8 中正常工作?
  • 为什么要去掉引号?
  • 为什么不在开发者工具测试模式下创建数组?

谢谢大家:)

最佳答案

简短回答:

这是一个兼容性问题。 JScript 5 引擎 (IE7/IE8) 存在严重缺陷,这是它所做的事情之一(从属性中剥离 " 并在生成 innerHTML 字符串时更改大小写)。同样,因为innerHTML螺丝带有大写字母,它试图匹配您的 .split("</div>");针对包含 </DIV> 的字符串并失败了。

尝试使用.split(/<\/div>/i);反而。这并不能解决 " 的损失s 来自您的属性,但这是部分修复。 See this answer对于一个似乎可以修复缺少引号和大写的函数(如果引号是必要的)。

<小时/>

在如何针对旧版 IE 进行测试的更大问题中:

本质上,浏览器模式不会对 Internet Explorer 呈现页面的方式做任何事情1。浏览器模式会影响 IE 获取页面的方式,从而更改发送到服务器的 UserAgent。

文档模式发生变化 version of the Trident rendering engine ,以及是否 IE9 Chakra Javascript engine or the IE8/IE7 variants of the JScript engine被使用。

TL;DR,出于测试目的,您应该将浏览器模式更改为 IE8,然后观察文档模式是否默认为 IE8 标准或 Quirks。如果代码不起作用,请在两者之间切换。如果代码随后有效,请确保您为有效的模式设置了适当的 DOCTYPE ( Transitional for Quirks mode, Strict for Standards mode )。

[1] 浏览器模式也会影响浏览器解释条件注释的方式,以及默认文档模式(使其与浏览器模式匹配),因此仅更改此是一个好方法弄清楚 IE8 将如何解释页面...但是如果您有 X-UA 兼容的元标记,这种行为很快就会中断,因此如果您使用这些标记,只需将文档模式设置为匹配即可。

关于javascript - IE 测试 Javascript "Browser Mode" "Document Mode"让我发疯!是浏览器兼容性问题还是怎么回事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13771703/

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