我为客户build立了一个PHP / JavaScript网站。 然后,他们要求我复制它,除了作为一个独立的Mac应用程序。 我用一个结合了embedded式Web服务器,PHP和“WebView”的应用程序完成了这个工作 – WebKit Web浏览器的Cocoa-ish版本可以embedded到标准的应用程序窗口中。 这一切都工作得很好 – 我重新使用了超过10,000行的PHP / JS代码,这样可以节省几个月的时间,以“原生”代码重新实现。
现在他们想要一个Windows的等价物。 我相当有信心可以让PHP和Web服务器工作。 而且我知道embedded基本的IEfunction非常简单。
然而…在我的Mac设置中,WebView(通过windowScriptObject的东西)给了我从C ++调用JavaScript方法的能力。 例如,我可能会调用C ++的JavaScript方法来更新屏幕。 同样,我可以设置一些东西,以便浏览器中的JavaScript调用可以触发C ++方法 – 例如,我使用它来让用户点击“浏览”,并使用真正的标准文件浏览器select文件path。
所以我的问题是,是否有一个基于Windows的embedded式浏览器设置,让我以同样的方式与JavaScript交互?
(JavaScript < – > WebKit接口在这里更详细地描述: http : //lipidity.com/apple/javascript-cocoa-webkit/ )
也许可以尝试使用像Appcelerator Titanium这样的东西,这样当你的客户说他们希望在Linux,iPhone或Android上工作时,你就可以做好准备了。
引用维基百科 :“Appcelerator Titanium是一个使用Web技术开发移动和桌面应用程序的平台。[…]支持基于标准的Web技术:所有平台上的HTML,CSS和Javascript,以及用于桌面平台的PHP,Python和Ruby 。支持流行的JavaScript和AJAX框架,包括jQuery,YUI,MooTools,Scriptaculous等等。
听起来就像是一个完美的工具。
当您嵌入Web浏览器控件(IE)时,您的应用程序代码可以简单地调用窗口对象上的execScript(http://msdn.microsoft.com/en-us/library/ms536420(v=vs.85).aspx) 。 通过使用脚本中的window.external对象,并使用应用程序中的ObjectForScripting(或C ++等价物),可以将脚本调用到应用程序中。
也许Qt会对你的情况很好,你也有QtScript,并且可以通过evaluateJavaScript注入javascript
我在网上找到了一个很好的例子,用于从C嵌入式浏览器中调用JS …基本上使用COM-ish方法,可以从脚本对象获取DISPID,然后使用Invoke()方法。 这很好。
但事实证明,我需要从我的JS代码中调用C ++ funcs。 看起来这是可能的,经过几个小时的混乱之后,我想我已经差不多了 – 就像上面的反向操作一样 – 创建一个COM对象,然后将其挂接到浏览器的脚本对象 – 但最后我无法关闭交易 – 我不断收到“图书馆未注册”的错误。 老实说,我不太了解COM,做得对。
那么,我呢,为了它,试图建立我的第一个C#应用程序。 在大约20分钟的时间里,我有一个应用程序在浏览器中运行,我可以在其中调用JS并让浏览器调用C#方法。 Geesh。 在这个经历之后,我是.NET的信徒,也是90年代微软技术的一个确信无法相信的人。
为了完整性,我想提一下我的WebKit的Windows端口,其中包括Mac上WebKit的各种跨层功能。
我发布了一些示例代码,演示了如何将WebKit嵌入到原生WinAPI应用程序中,并使用JavaScript-> C ++和C ++ – > JavaScript示例。
这个例子是一个非常大的应用程序的一个小测试用例,它使用嵌入式WebView作为主要的UI组件。 我可以确认你所做的不仅是可能的,而且是建立应用程序的好方法。