標籤:android c style blog java a
網上說的很多針對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函數的功能了
轉載請註明出處:http://blog.csdn.net/h_o_w_e/article/details/28887005