C# WinForms:我应该使用Web浏览器控件吗?

4
我正在构建一个 Windows Forms 应用程序,其中将添加一个控件,该控件将显示相当多的不同数据。大部分情况下,内部数据将是导航按钮和帮助/培训文本。
我认为,如果我可以使用 HTML 编写内容,然后在应用程序中显示该内容,那将是理想的,但我不确定这是否是一个好主意。
另一个需要注意的问题是,在不久的将来,将有一个基于 Web 的相同应用程序版本,使用 HTML 完成该应用程序的这一部分将非常容易实现重用。
如果用户没有安装 IIS,则此事项可能会有所影响。

在这种情况下,我会选择WPF,具体取决于您的学习曲线容忍度。 - BeemerGuy
用户无需安装IIS,因为Web浏览器控件将连接到您自己托管的网站。 - Ranhiru Jude Cooray
2个回答

6
为此,我认为嵌入式网络浏览器会非常好。许多应用程序使用Web浏览器控件进行导航、信息、培训等。Steam 就是一个例子。此外,可重用性几乎总是最佳实践。
但我会使用 WebKit 而不是内置的IE Web浏览器控件。

2
即使 Valve 也厌倦了 MSHTML/Trident,最新版本的 Steam 已经转向 WebKit,因此对于 WebKit 我们要点赞。 - BoltClock
唯一阻碍我使用webkit浏览器的是c#与js通信的缺失。但对于其他任何目的来说.. +1 - Josh Smeaton

2
我有一个类似的应用程序,我认为WebBrowser控件非常好用。如果你认为这正是你需要的,我会推荐它,而且还有许多其他类似的应用程序。您可以使用HtmlDocument.InvokeScript()从C#调用HTML页面中的Javascript函数,也可以使用window.external从Javascript调用C#,这种双向通信使生活变得简单。
用户不需要安装IIS,因为您不是在运行Web服务器,而只是使用HTML显示内容。
说实话,我会选择内置的IE控件,而不是webkitdotnet。虽然WebKit本身优于IE,但是webkitdotnet项目在版本0.5时没有C#<> JavaScript通信或DOM访问功能,并且似乎很难确定它是否仍在积极开发中。如果/当它具有功能平衡时将会很棒,因为IE显然远非完美,但内置的IE控件的优点是您的应用程序的每个用户都已经安装了它,而且WebBrowser控件经过了充分测试。我发现一些缺点:
  • IE版本可能从6到9,因此您需要测试以确保您的内容在所有版本上都能正常工作(就像网站一样)。
  • 在IE中存在一个错误(至少在8之前),即相对链接与<base href="file://...">结合使用时不起作用。这可能会阻止您在本地HTML文档中使用相对链接。
  • 有时页面在WebBrowser控件内部显示的方式与在其外部显示的方式不同。例如,http://bugs.jquery.com/ticket/7104是其中之一,我还遇到了另一个类似的影响cufon的错误。
  • 出于兼容性原因,即使用户安装了IE> 7,WebBrowser控件仍将默认以IE7呈现模式呈现您的内容。这与独立的IE不同,后者默认情况下以最标准的模式呈现,因此如果您没有预料到它,它可能会让您感到困惑。如果需要,您可以通过添加<meta http-equiv="X-UA-Compatible"标记来更改此设置,但实际上我发现这使生活变得更加轻松,因为它减少了您必须测试的不同版本的数量。

有趣的是,你仅仅基于版本号就认为WebKit还没有准备好用于生产环境,但是你却能够列出4个内置IE控件的问题。你在使用WebKit时遇到了哪些问题? - Cody Gray
抱歉,我修改了一下以更清楚地表达我的意思。当然,版本号本身并没有什么意义。 - Michael Low
@mike你去年在我需要WebBrowser控件HTML与.NET进行通信的时候在哪里啊?这对未来会有很大帮助,谢谢! - Josh Smeaton
@Josh Smeaton,很高兴能帮助 :) 你需要将表单设置为FullTrust,并在此之前将WebBrowser控件的ObjectForScripting属性设置为该表单,然后它应该可以正常工作。不能做到这一点是阻止我转向Webkit的原因之一。 - Michael Low
这个很好用。现在我只需要想办法测试不同版本的IE,但那将在应用程序完成后进行! - Shane Grant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接