如果您正在寻找最简单的“我写作最少的代码”,嵌入一个完整的浏览器实际上比从头开始编写精简的浏览器更容易。
所以,最简单的解决方案可能是使用QWebView
。下面简单介绍一下,你可以得到如下的简单(或“精简”):你正在使用一个功能强大,复杂的跨平台GUI库,它有一个深度集成的WebKit包装器,暴露自定义对象,例如URL甚至是网页,直到对象模型。
但是从您的代码中,只需要将Web视图粘贴到窗口中,使用canvas
标记和您的JS应用创建HTML页面,并将所有内容都挂钩。
一个缺点是学习曲线。 Qt很大,在你做任何有用的事情之前,你必须至少学习基本概念。幸运的是,如果你已经完成了ObjC编程,signal-and-slots,QObject模型等应该都很熟悉......但不完全一样。
另一个缺点是分布。您可能需要与Python一起使用Qt和PySide(或PyQt)(这是一项繁重的要求,除非您只关心Linux用户),或需要了解包装PySide
和cx_freeze
/py2exe
/py2app
/etc的内容。
从外面与画布或JS代码交谈是非常容易的。该QWebView
包含QWebPage
,其中包含了QWebFrame
,这是QWebElement
包装由一个完整的DOM:
frame = view.page().mainFrame()
canvas = frame.findFirstElement("#cocos-canvas')
然后,您可以拨打evaluateJavaScript
在DOM本身或任何元素,以同样的方式你从ObjC的WebKit包装器中找到熟悉的。
对于走另一条路,而你可以做注射JS或评估再打到你的代码的函数定义的同样的招数,你也可以只重视QAction
s到一个网页,你可以再挂钩跟正常操作一样(菜单项,按钮点击等)。当然,JS可以像用户一样轻松触发它们。
或者您可以通过调用addToJavaScriptWindow
将任何QObject
子类直接暴露给JS,这允许您的JS代码调用对象的方法,包括附加回调的方法。详情请参阅The QtWebKit Bridge。
如果您从头开始,显然只是模拟HTML画布将比模拟整个HTML DOM简单得多。但是如果你正在寻找预先存在的代码,我不知道前者有什么,后者有多种可能性。显而易见的是WebKit/Chromium,并且有几种不同的包装。那是你要的吗? – abarnert 2013-04-29 19:35:55
嗯,是的,我正在寻找最简单的“我写作的最少代码”。我还需要能够将JS代码挂接到Python代码中(例如,在相同的地方,这些挂钩将会插入本机的Objective-C代码中),例如 – Claudiu 2013-04-29 19:48:29