c# - 在 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?
尝试的解决方案\调查结果:
- 我们已经正确设置了浏览器仿真,这样 Web 浏览器的行为就像 IE 8 一样,但仍然无法正常工作。(尝试了 8000 和 8888)
- 我们尝试使用 meta X-UA-Compatible而不是 Browser Emulation,但仍然无法正常工作。(尝试了“IE=8”和“IE=EmulateIE8”)
- 我们尝试设置各种 DOCTYPE,但它也不起作用。
- 在上面的示例代码中,我放了一个 MsgBox 来查看要在内部 HTML 中设置的数据,并且 IE8 没有在 null 之后提醒数据。只有在将 null 设置为内部 HTML 时,它才能忽略它。这可能是 IE 中内部 HTML 的特殊行为吗?
- 我不知道是否有必要,但我尝试在 javascript 中翻译代码,对于 IE8 和 WebBrowser 控件仍然得到相同的结果。
解决方案
推荐阅读
- android - 为什么 RecyclerView 中的 ConstraintLayout 在运行时会改变它的宽度设置?
- c++ - 如何修改向量向量的元素(使用自动迭代器)?
- c - C 中的默认参数和参数提升
- python-3.x - 从数据中生成随机样本
- bash - 如何远程登录到主机名和端口并执行 cp(copy) 命令以使用 bash 脚本将文件复制到当前工作目录
- firebase - 如何识别 Google Cloud 函数中的错误原因
- java - 如何通过在另一个类中调用的方法更改对象变量?
- itext7 - 如何使用 iText7 执行吊销检查?
- android - ListView 不显示添加的项目
- c++ - 静态原子全局变量在线程之间具有不同的值