iOS webView js和Objective c交互

常見問題, 使用webView時, 常常需要調用Objective c的方法。

兩種方式可以完成需求, 簡單記錄方便日後常看。

第一種是網頁js調用方法loadURL();

例如:

網頁端:

loadURL("myWebView://callfunc?param1=1&param2=2.......");

iOS端:webView代理

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *url = [[request URL].absoluteString stringByRemovingPercentEncoding];
    NSLog(@"%@", url);
    if ([url hasPrefix:@"myWebView:"]) {
        //調用網頁,彈出窗口
        [webView stringByEvaluatingJavaScriptFromString:@"alert(1);"];
    }
    return YES;
}

第二種方法

在iOS代碼處獲取javaScriptContext, 得到上下文。
具體代碼:
iOS端:webView代理
- (void)webViewDidFinishLoad:(UIWebView *)webView
{

    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    context[@"test1"] =  ^ NSString *() {
        NSArray *args = [JSContext currentArguments];
        for (id obj in args) {
            NSLog(@"%@",obj);
        }
        return @"123";
    };
    
}

此處, 申明一個方法名爲test1的方法。
網頁端, js直接調用普通方法一樣,直接調用即可。



發佈了59 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章