WPF WebBrowser - 如果使用NavigateToString加载内容,则内置搜索对话框不起作用

时间:2013-10-09 02:46:02

标签: c# xml wpf navigation webbrowser-control

我使用WebBrowser显示生成的XML。我的XML字符串通过调用NavigateToString加载到浏览器中:

var text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
         + Environment.NewLine
         + "<whatever/>";
Browser.NavigateToString(text);

浏览器加载字符串内容后,我尝试使用标准的Ctrl + F搜索对话框搜索任何显示的文本 - 但它始终显示警告“找不到匹配项”。

如果我将XML字符串保存到文件并使用Browser.Navigate(filename),则可以正常工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

导航到文件时,WebBrowser控件执行MIME类型嗅探(通常使用文件扩展名作为提示)。然后它创建相应类型的Active Document对象。大多数情况下,它是MSHTML Document的实例,但也可以是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转换)。

答案 1 :(得分:0)

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

webbrowser.Navigate(string filepathToXML)

这样,内置的搜索面板就像一个超级按钮一样工作。