網上說的很多針對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函數的功能了
轉載請注明出處: