簡體   English   中英

關於如何從在UIWebView中運行的JS與托管obj-c應用程序進行通信的建議?

[英]Suggestions for how to communicate from JS running in a UIWebView to the hosting obj-c app?

我計划有一個帶有uiwebview的shell iphone應用程序,我的應用程序的大部分都在uiwebview中通過javascript運行。

現在我知道通過使用stringByEvaluatingJavaScriptFromString從obj-c環境到javascript環境的通信很容易,但是有一個很好的推薦方式從javascript環境到obj-c世界進行通信嗎?

謝謝

我總是使用應用程序“導航”到特殊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)獲取的某種事件隊列,以響應使用上述方法發送到應用程序的消息。 對於從app到js的通信,JSON也非常合適。

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

在UIWebView中調用javascript有一個非常好的方法:

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

如MVDS通過Url所述,最好完成回撥:

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

我剛剛使用mvds和Ondrej描述的方法創建了一個為您提供便利的庫。 包括雙向通信,jQuery事件樣式,帶有多個偵聽器的可選JSON有效負載。 看看: https//github.com/tcoulter/jockeyjs

也許通過更改url哈希?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM