如果您正在寻找“我可以编写的最少代码”方面最简单的方法,那么嵌入完整的浏览器实际上比从头开始编写精简的浏览器更容易。
因此,最简单的解决方案可能是使用QWebView
.
在幕后,这远非你所能得到的简单(或“精简”):你正在使用一个强大、复杂的跨平台 GUI 库,它有一个深度集成的 WebKit 包装器,它公开自定义对象诸如 URL 甚至网页之类的东西一直到对象模型。
但从您的代码中,只需将 Web 视图粘贴到窗口中,创建带有canvas
标签和 JS 应用程序的 HTML 页面,然后将所有内容连接起来。
一个缺点是学习曲线。Qt 很大,你必须至少学习基本概念,然后才能做任何有用的事情。幸运的是,如果你做过 ObjC 编程,信号槽、QObject 模型等应该都感觉很熟悉……但并不完全相同。
另一个缺点是分布。您要么需要 Qt 和 PySide(或 PyQt)以及 Python(这是一个沉重的要求,除非你只关心 linux 用户),要么学习/ / /etc打包PySide
的细节。cx_freeze
py2exe
py2app
从外部与画布或 JS 代码交谈非常容易。QWebView
包含 a ,其中QWebPage
包含 a ,它是由包装器QWebFrame
组成的完整 DOM :QWebElement
frame = view.page().mainFrame()
canvas = frame.findFirstElement("#cocos-canvas')
然后,您可以调用evaluateJavaScript
DOM 本身或任何元素,就像您在 ObjC 的 WebKit 包装器中发现的那样熟悉。
换一种方式,虽然您可以执行注入 JS 或评估回调代码的函数定义的相同技巧,但您也可以将QAction
s 附加到网页,然后您可以以与您相同的方式连接正常操作(菜单项、按钮点击等)。当然,JS 可以像用户一样轻松地触发它们。
或者您可以QObject
通过调用直接将任何子类公开给 JS addToJavaScriptWindow
,这允许您的 JS 代码调用对象上的方法,包括附加回调的方法。有关详细信息,请参阅QtWebKit 桥。