WPF Web 浏览器 - 如果内容是使用 NavigateToString 加载的,则内置搜索对话框不起作用
本文关键字:加载 内置 不起作用 对话框 搜索 NavigateToString 浏览器 Web 如果 WPF | 更新日期: 2023-09-27 18:34:26
我使用WebBrowser来显示生成的XML。我的 XML 字符串通过调用 NavigateToString 加载到浏览器中:
var text = "<?xml version='"1.0'" encoding='"UTF-8'"?>"
+ Environment.NewLine
+ "<whatever/>";
Browser.NavigateToString(text);
浏览器加载字符串内容后,我尝试使用标准 Ctrl+F 搜索对话框搜索任何显示的文本 - 但它总是显示警告"找不到匹配项"。
如果我将XML字符串保存到文件中并使用Browser.Navigate(文件名(,它可以工作。
有什么想法吗?
导航到文件时,WebBrowser
控件将执行 MIME 类型的探查(通常使用文件扩展名作为提示(。然后,它会创建相应类型的活动文档对象。大多数情况下,它是MSHTML文档的实例,但也可以是XML,PDF或Word文档,所有这些都支持Active Document界面。
现在,当您导航到带有 NavigateToString
的字符串时,WebBrowser
不会尝试识别文档类型,而只是创建 MSHTML 文档(而不是 XML 文档(的实例,然后尝试将内容解析为 HTML 并失败。
我不认为您可以使用NavigateToString
获得所需的行为,我相信这同样适用于NavigateToStream
。为了说明发生了什么,请获取您的 XML 内容并将其另存为 filename.html
、 filename.txt
和 filename.xml
。尝试使用 IE 打开每个文件。
附带说明一下,当您导航到 URL 时,服务器实际上有一个选项来建议使用 HTTP 标头的 MIME 类型。浏览器可能会也可能不会容忍此类建议(它仍将执行一些验证检查(。
底线:您将无法使用NavigateToString
或NavigateToStream
呈现XML。您必须先将其转换为 HTML(例如,使用 XSLT 转换(。
我刚刚遇到了同样的问题。甚至可以使用重载直接打开 xml 文件:
webbrowser.Navigate(string filepathToXML)
这样,内置搜索面板就像一个魅力。