首先要做一些明确的定义。
用户:使用该软件的现场人员
客户:为其用户支付定制版软件的公司。
我们目前有一些应用程序需要根据用户所属的客户端对用户界面进行重大更改。我们目前为每个客户都有一个单独的构建,但随着客户数量的增加,管理所有这些单独的版本变得更加痛苦。
我的目标是切换到一个可以根据登录的人动态自定义的通用客户端。由于我们的软件无论如何都需要互联网连接(广泛使用web服务)我正在考虑在.NET中使用WebBrowser控件允许它与计算机上所需的硬件进行交互(通过ObjectForScripting)。
然后整个用户界面用HTML / JavaScript编写并存储在服务器上,使新用户界面的分发和维护变得微不足道。通用客户端不过是一个自定义Web浏览器,它知道如何与我们的硬件设备通信,并且可以通过javascript告知它。
我看到这种方法有很多优点,而且没有太多缺点。我错过了什么?我为什么不朝这个方向走?
答案 0 :(得分:5)
有一些商业应用程序成功使用此方法。以下是需要牢记的一些注意事项。这些不应该阻止你尝试这种方法。但是,要问自己的一个关键问题是,该应用程序是否可以是本机Web应用程序。
网络浏览器控件“吃标签”。您可以使用Tab键将输入焦点从托管应用程序移动到浏览器控件中,但是您无法通过它标记出来(除非您明确地编写代码)
HTML / Javascript应用程序是单线程的。如果您需要任何后台处理,则可能需要将该任务委派给托管应用程序。
如果Web浏览器控件中出现错误情况,则会将其视为脚本错误,并包含在控件内。收容是件好事。但您可能甚至没有意识到构建/调试时出现错误情况。
如果没有网络连接,用户可以看到浏览器的失败页面。你不能先抢占它并显示你自己的信息。
根据您的应用程序及其实现方式,导航可能看起来比桌面应用程序中常见的更缓慢。特别是页面重新加载。小心使用异步AJAX可以帮助减轻部分或全部。
您的用户将知道他们正在使用网页。单独的UI设计无法隐藏这一事实。响应性和偶尔的失败将揭示这一事实。这对您来说可能是也可能不是问题。
您的应用程序必须支持多个浏览器版本。 .NET Web浏览器控件是用户计算机上Internet Explorer实现的包装器。那将是IE6,7,8等,具体取决于那里安装的内容。
答案 1 :(得分:3)
WPF不会为您提供易于为不同用户设置外观的优势,同时保留丰富的UI优势吗?
答案 2 :(得分:1)
这取决于应用程序的类型,但我不明白为什么这不起作用。可能的缺点:您必须使用HTML和JavaScript,WebBrowser组件依赖于已安装的Internet Explorer版本(并不总是相同),UI本身并不是原生的,可能感觉像是一个Web应用程序(不必是一个缺点)。 如果我是正确的,我认为Microsoft Money的UI完全基于WebBrowser控件。
答案 3 :(得分:1)
如果您需要实现任何复杂功能,我不建议使用WebBrowser控件。缺点是:
它的行为取决于安装的IE版本和IE设置,但与'真实'IE不完全相同。我看到一些情况,当JS功能在一个独立的IE中工作,但没有任何明显的原因(因此没有任何机会修复它)在WebBrowser控件中不起作用。
很难自定义UI(更改上下文菜单,制作一些复杂的事件处理程序),因为控件本身并没有暴露。因此,以你需要的方式让它与环境互动可能是不合理的。
您可以考虑使用完全基于Web的解决方案,在独立浏览器中工作 - 至少您不太可能在那里找到一个不常见的错误。可以使用applet或ActiveX控件与硬件进行交互。
另一种选择是将瘦客户端开发为Windows应用程序,以某种方式根据用户自行配置。如果您仍然需要嵌入浏览器,可以使用Gecko(Mozilla的引擎)或WebKit(Chrome的引擎) - 我没有任何实际操作经验,但可能它们在嵌入式和独立版本之间具有更高的一致性
答案 4 :(得分:0)
如果您没有通过切换到Web界面而丢失重要的UI功能,我不明白为什么这不是一个好的解决方案。
答案 5 :(得分:0)
实际上,它看起来是一个很好的解决方案。但有一件事是我想到的:
为什么不切换到完整的Web应用程序?有些事情你只能在浏览器之外做客户端吗?因为如果没有,您可能会通过将整个事物变成Web应用程序来大大简化您的部署方案。