c# - HtmlDocument.Write 剥离引号

标签 c# html browser dom

出于某种原因,当我尝试写入 HtmlDocument 时,它会去掉我给它的字符串的一些(不是全部)引号。

看这里:

HtmlDocument htmlDoc = Webbrowser1.Document.OpenNew(true);
htmlDoc.Write("<HTML><BODY><DIV ID=\"TEST\"></DIV></BODY></HTML>");
string temp = htmlDoc.GetElementsByTagName("HTML")[0].InnerHtml;

temp 的结果是这样的:

<HEAD></HEAD>
<BODY>
<DIV id=TEST></DIV></BODY>

除了去除引号外,它的工作原理与它应该的完全一样。有没有人有关于如何防止或解决此问题的解决方案?

最佳答案

innerHTML 无法保证它会返回与您传入的字符串相同的内容。innerHTML 是由浏览器使用其 HTML 树表示构造的 - 因此它将生成它认为合适的结果字符串。

因此,根据您的需要,您可以尝试使用一些 HTML 解析代码来理解不带引号的 ID,或者尝试说服浏览器使用最新的引擎,这样更有可能生成您喜欢的 innerHTML。

即在你的情况下,它看起来至少 IE9 将你的 HTML 呈现为 IE9:Quirks 模式(以你不满意的形式返回 innerHTML),如果你将有效的 HTML 或强制模式设置为 IE9:Standard,你将获得带有 qoutes 的字符串喜欢

document.getElementsByTagName("html")[0].innerHTML 

IE9:标准 - "<head></head><body><div id="TEST"></div></body>"

IE9:怪癖 -

"<HEAD></HEAD>
<BODY>
<DIV id=TEST></DIV></BODY>" 

您可以自己尝试创建示例 HTML 文件并从磁盘打开。 F12 在菜单栏中显示开发工具和 checkout 模式。

关于c# - HtmlDocument.Write 剥离引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7053118/

相关文章:

c# - 为什么在执行 ASP .NET Excel 互操作时出现内存不足错误?

c# - dotnet REST API 中返回类型的多态性

javascript - 在 safari 中使用 javascript 播放声音

cookies - 什么是 arp_scroll_position cookie 以及如何防止它?

c# - 使用 WCF JSON Web 服务的客户端配置

c# - 将子类别添加到工作流事件中的依赖属性

html - 应用标签两次会导致不同的 css 样式

javascript - Srcset 似乎不适用于 iOS7 中的移动 safari?

javascript - 需要将数组中的值插入到 html 表中

browser - 调试二进制 websockets 框架