天天看點

iOS 利用UIWebView與JavaScript互動的最簡單辦法(本人已驗證可行)

網上說的很多針對Mac OS X的,還有很多都是複制”朱祁林“的貼子的,絕大多數人是沒有經過驗證的,

看清楚了,這裡說的是針對iOS的!并且方法很簡單!!并且驗證可行的!!!

1, UIWebView調用 JavaScript 的函數:

NSString* strValue = [webView stringByEvaluatingJavaScriptFromString:@"YourFunctionName(‘YourParameter‘)"];

上面這句就是調用 JavaScript裡面自定義的函數 YourFunctionName(傳入參數‘YourParameter‘,取得傳回值賦給strValue )

2,JavaScript (通過UIWebView)調用ObjC方法:

下面說到的是最簡單、最通用的辦法!!腳本寫完之後可以丢到Android執行的:

就是利用UIWebView(Android的是WebView)攔截URL的功能!!!約定一個特殊URL,寫在腳本,讓上層去攔截分析!!比如,

在JavaScript寫上:

window.location.href = "ABCD://XXXYYYZZZ"

在iOS裡面:

實作UIWebViewDelegate下面這個函數(不要忘記設定 webView.delegate = self 這樣細節)

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

{

          NSString* strXXX = request.URL.resourceSpecifier;

          //假設隻是分析 "ABCD://"

            NSRange range = [strXXX rangeOfString:@"ABCD://"];

             if( range.location != NSNotFound )

             {

                    //就在這裡執行操作了!!!

                   return NO;//傳回NO,表示取消對本次請求的導航

              }

        return YES;

}

//Android裡面,利用WebView 重載這個函數也可以做到同樣效果

public boolean shouldOverrideUrlLoading(WebView  view, String url) { 

return true;

這樣,當JavaScript執行window.location.href = "ABCD://XXXYYYZZZ"這句,就觸發上層的對應操作了!

也就是實作JavaScript調用上層ObjC函數的功能了

轉載請注明出處: