首页 > 解决方案 > 在 WebBrowser 控件中忽略空字符后的 div innerHtml 字符串,但在 IE8 中没有

问题描述

背景:我们之前的应用程序运行在 Windows 7 中,使用 IE 8 作为浏览器来显示 HTML。但是当我们升级到 Windows 10 时,我们无法再使用 IE 8,因此我们创建了一个 WinForms 应用程序,该应用程序托管了一个 WebBrowser 控件来显示 HTML。

问题:我们注意到在使用WebBrowser控件时有些字符串信息不再显示,发现中间有空字符的字符串会丢弃后面的字符。在 IE 8 中,null 被忽略,它能够显示整个字符串。我创建了一个简单的 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>

输出(即 8):

0
1
2
3

输出(WebBrowser 控件):

0
1

在我们的应用程序中,设置为表元素的第二个检索数据(在上面的示例中为“1”)在它之后包含 null,而在 WebBrowser 控件中发生的情况是 null 之后的数据被丢弃,因此无法打印表格上的全部数据。但是,在 IE8 中,它似乎只是忽略了 null 并将整个数据显示在表格上。是否有某种方法可以使 WebBrowser 控件的行为类似于 IE 8?

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

  1. 我们已经正确设置了浏览器仿真,这样 Web 浏览器的行为就像 IE 8 一样,但仍然无法正常工作。(尝试了 8000 和 8888)
  2. 我们尝试使用 meta X-UA-Compatible而不是 Browser Emulation,但仍然无法正常工作。(尝试了“IE=8”和“IE=EmulateIE8”)
  3. 我们尝试设置各种 DOCTYPE,但它也不起作用。
  4. 在上面的示例代码中,我放了一个 MsgBox 来查看要在内部 HTML 中设置的数据,并且 IE8 没有在 null 之后提醒数据。只有在将 null 设置为内部 HTML 时,它才能忽略它。这可能是 IE 中内部 HTML 的特殊行为吗?
  5. 我不知道是否有必要,但我尝试在 javascript 中翻译代码,对于 IE8 和 WebBrowser 控件仍然得到相同的结果。

标签: c#htmlwinformsvbscriptwebbrowser-control

解决方案


推荐阅读