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(文件名(,它可以工作。

有什么想法吗?

WPF Web 浏览器 - 如果内容是使用 NavigateToString 加载的,则内置搜索对话框不起作用

导航到文件时,WebBrowser控件将执行 MIME 类型的探查(通常使用文件扩展名作为提示(。然后,它会创建相应类型的活动文档对象。大多数情况下,它是MSHTML文档的实例,但也可以是XML,PDF或Word文档,所有这些都支持Active Document界面。

现在,当您导航到带有 NavigateToString 的字符串时,WebBrowser不会尝试识别文档类型,而只是创建 MSHTML 文档(而不是 XML 文档(的实例,然后尝试将内容解析为 HTML 并失败。

我不认为您可以使用NavigateToString获得所需的行为,我相信这同样适用于NavigateToStream。为了说明发生了什么,请获取您的 XML 内容并将其另存为 filename.htmlfilename.txtfilename.xml 。尝试使用 IE 打开每个文件。

附带说明一下,当您导航到 URL 时,服务器实际上有一个选项来建议使用 HTTP 标头的 MIME 类型。浏览器可能会也可能不会容忍此类建议(它仍将执行一些验证检查(。

底线:您将无法使用NavigateToStringNavigateToStream呈现XML。您必须先将其转换为 HTML(例如,使用 XSLT 转换(。

我刚刚遇到了同样的问题。甚至可以使用重载直接打开 xml 文件:

webbrowser.Navigate(string filepathToXML)

这样,内置搜索面板就像一个魅力。