2010-05-11 18 views
3

我明白在iPhone上這樣做需要捕捉鏈接請求(根據我的其他iPhone問題UIWebView Expose JavaScript),並且您可以輕鬆完成相反操作並訪問Obj-C代碼中的JavaScript。如何在Mac OS X上使用WebKit將Objective-C函數公開到JavaScript?

但是,我希望JavaScript能夠調用一些Objective-C函數,這些函數將以某種方式在WebKit中註冊。我認爲你可以做得比捕獲iPhone上的鏈接更好,因爲在Mac OS X上我們可以訪問完整的WebKit。

我想基本上做Using JavaScript from Objective-C

更新的反向:例如是能夠以暴露目標c方法在JavaScript等self.external.objcmethod();

回答

6

看看my answerthis question,這非常相似。我提供的代碼顯示了你如何做你想做的事情。

實質上,您需要按照the documentation實現Web腳本協議。

您不需要定義您自己的URL方案處理程序,這隻對iPhone應用程序是必需的。在Mac上,WebView對象比iPhone上的UIWebView強多了幾個數量級,並允許從JavaScript完全橋接到Objective-C,反之亦然。

+0

謝謝,這正是我一直在尋找的! – Luke 2010-05-12 03:45:08

0

您可以瀏覽到 「的javascript:my_method()」,並攔截加載...

UIWebViewDelegate代表。

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIWebViewDelegate_Protocol/Reference/Reference.html

看那方法shouldStartLoadWithRequest
(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

Addtionally文檔,你可能會想看看https://dev.mobileread.com/trac/webkitbrowser/browser/trunk/WebKit-r30377/WebKit/qt/Api/qwebframe.cpp#L167

+1

您正在接聽iPhone。提問者詢問Mac OS X. – 2010-05-11 10:26:07

+0

AFAIK,WebKit保持不變...事實上,修剪掉(子集)iPhone – 2010-05-11 10:52:37

+0

謝謝。我在問這個問題,是否有比iPhone陷阱鏈接請求更好的方法。 – Luke 2010-05-11 15:07:26

0

我已經做到了這一點,在過去是方式實現我自己的URL方案。在您的HTML頁面中,您可以創建鏈接,如myapp://dosomefunction?aParameter=aValue。 Mac OS X將打開您的應用程序(如果它尚未運行),並在您點擊這些鏈接時將URL傳遞給它。它比捕獲請求稍微方便一些,它可以在系統任何地方使用任何Web視圖。

有關如何設置處理程序的詳細信息,請參閱this question的接受答案。不幸的是,這是一種單向操作。您將無法從應用程序獲取任何返回值。