winforms 在WebBrowser控件中忽略空字符后的div innerHtml字符串,但在IE8中未忽略

1u4esq0p  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(105)
    • 背景:**我们之前的应用程序在Windows 7中运行,并使用IE 8作为浏览器来显示HTML。但当我们升级到Windows 10时,我们无法再使用IE 8,因此我们创建了一个托管WebBrowser控件的WinForms应用程序来显示HTML。
    • 问题**:我们注意到在使用WebBrowser控件时,一些字符串信息不再显示,并且发现中间有空字符的字符串将丢弃后续字符。在IE 8中,空字符被忽略,并且能够显示整个字符串。我创建了一个简单的HTML来复制这个问题:
<HTML>
<TITLE>TEST</TITLE>
<HEAD>
<script language="VBScript">
Dim str
Sub Window_OnLoad()

str= "<TABLE >" & _
"<TR ><TD >0</TD></TR>" & _
"<TR ><TD >1" & chr(&H0) & "</TD></TR>" &_
"<TR ><TD >2</TD></TR><TR ><TD >3</TD></TR></TABLE>"

MsgBox str

document.all.mydiv.innerHtml = str
End Sub
</script>
</HEAD>
<BODY >
<div id="mydiv">

</div>
</BODY>
</HTML>

输出(IE 8):

0
1
2
3

输出(WebBrowser控件):

0
1

在我们的应用程序中,检索到的第二个数据(上例中为"1")设置为table元素后包含null,在WebBrowser控件中发生的是null后的数据被丢弃,从而无法打印表格上的全部数据,但在IE8中,它似乎忽略了空值并显示了表中的全部数据。2有什么方法可以使WebBrowser控件像IE8中那样工作吗?

    • 尝试的解决方案\调查结果**:

1.我们已经正确设置了Browser Emulation,这样Web浏览器就可以像IE 8一样工作,但它仍然不工作。(尝试了8000和8888)
1.我们尝试使用meta X-UA-Compatible代替浏览器仿真,但仍然不起作用。(尝试了"IE = 8"和"IE = EmulateIE8")
1.我们尝试设置所有类型的DOCTYPE,但它也不工作。
1.在上面的示例代码中,我放置了一个MsgBox来查看要在内部HTML中设置的数据,IE8并没有在空值之后警告数据。它只能在将其设置为内部HTML时忽略空值。这会不会是IE中内部HTML的特殊行为?
1.我不知道是否有必要,但我试图在javascript中翻译代码,仍然得到相同的结果,为IE8和WebBrowser控件。

yacmzcpb

yacmzcpb1#

虽然从问题中可以清楚地看出考虑了文档模式,但忽略了CASE在迁移到较新的文档模式时的重要性。此外,还指出使用IE 8时输出是完整的(0,1,2,3),但使用WebBrowser控件时输出是不完整的(0,1)。
我们可以通过将页面作为HTA运行来简化测试,这样做时,我们可以看到在IE=8模式(或更低)下输出为(0,1),而在IE=9(或IE=10)模式下输出为(0,1,2,3)。
原始代码中的大小写问题是这一行:

Sub Window_OnLoad()

它应该是:

Sub window_onload

具体来说,Window在IE=9或更高模式下必须为window(全部小写)。“onload”的大小写和不必要的括号没有功能差异,但已更改为它们的标准格式。请注意,在IE=9或更高模式下从元素 * 调用 * sub需要括号,但在没有参数传递时Sub本身不需要括号。
下面是输出(0,1,2,3)并忽略空字符的代码的最小版本:

测试.hta

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=9">
<script language="VBScript">
Sub window_onload
  d1.innerHTML = "<table><tr><td>0</td></tr><tr><td>1" & chr(&H0) & "</td></tr><tr><td>2</td></tr><tr><td>3</td></tr></table>"
End Sub
</script>
</head>
<body>
  <div id=d1></div>
</body>
</html>

在上面的代码中,如果将IE=9更改为IE=8,则输出将为(0,1)。

相关问题