如果您正在尋找最簡單的「我寫作最少的代碼」,嵌入一個完整的瀏覽器實際上比從頭開始編寫精簡的瀏覽器更容易。
所以,最簡單的解決方案可能是使用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