2011-04-05 64 views

回答

12

我總是用一種方法,其中應用程序「導航」到特殊的URL:

window.location = "myapp://somemessage/someargument"; 

而且在應用程序捕獲這個在下面的功能:

-(BOOL)webView:(UIWebView *)webView 
       shouldStartLoadWithRequest:(NSURLRequest *)request 
       navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSURL *url = [request URL]; 
    if ([[url scheme] isEqualToString:@"myapp"]) 
    { 
     [self handleJSEvent:url]; 
     return NO; 
    } 
    return YES; 
} 

而且,根據您需要什麼,您可以使用您使用JSON.stringify(events)獲取的某種事件隊列來響應使用上述方法發送到應用程序的消息。對於從應用程序到js的通信JSON也非常合適。

如果有一個標準或標準的方法來做到這一點,我顯然錯過了它。

+1

從我的谷歌搜索,我認爲你已經描述了共同的'標準',如果你願意。大! – Chris 2011-04-05 23:21:37

+1

不客氣。除了我的直覺告訴我,這種方法也相當可靠。 – mvds 2011-04-05 23:30:45

+0

非常感謝。很高興知道這也是可靠的,這很重要。 – Chris 2011-04-06 00:05:54

1

也許通過改變URL哈希?

+0

你的意思是blah.com/something.html#HASH?我注意到這種方法,是否涉及捕獲shouldStartLoadWithRequest事件? – Chris 2011-04-05 23:06:54

2

有一個很不錯的方法調用的UIWebView裏面的javascript:作爲通過URL提及MVDS

[webView stringByEvaluatingJavaScriptFromString:@"yourJSFunction('some_data');"]; 

回調是最好的做法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
2

我剛剛創建了一個庫,將主要使用mvds和Ondrej描述的方法爲您提供便利。包括雙向通信,jQuery事件風格,可選的JSON有效載荷與多個監聽器。檢查出來:https://github.com/tcoulter/jockeyjs

相關問題