JS代码:

(贴下判断iOS还是安卓的代码:

varu = navigator.userAgent;
varisAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
varisiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
alert('是否是Android:'+isAndroid);
alert('是否是iOS:'+isiOS);
if(isAcdroid){

 }else if(isiOS){


 }

    

        iOS and Js

        

    

    

    

        

        

            

Test how to use objective-c call js


            

            

            

            

            

        

        

        

            

            Click me here:Jump to Baidu

        

        

        

        

            

        

        

        

    

效果图:

在点击前三个按钮的时候会调用方法:

// 警告框

- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler{

    

    completionHandler();

    NSLog(@"3-----%@",message);

}

输出的message就是JS传递给我们的数据。
如果点击第四个conform按钮会调用方法:
// 确认框

- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler{

    completionHandler(YES);

    NSLog(@"-----%@",message);

}

输出的message就是JS传递给我们的数据。
如果点击最后一个input按钮会调用方法:
// 输入框

- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullableNSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString *__nullable result))completionHandler{

    completionHandler(@"http");

    

     NSLog(@"-----%@", prompt);

}

输出的prompt是JS传递给我们的数据。


注意:在利用UIWebView展示网页的时候我们如果要想与JS进行交互那么我们就得获取JS代码中的方法名,而我们在使用WKWebView的时候就不用了。JS代码中利用

 alert('liangsen...');

来给我们传递数据,我们用runJavaScriptAlertPanelWithMessage这个方法来接收JS传递给我们的数据。

传数据:

网页给客户端传递的数据有时并不只是一个字符串这个简单,还可能是JSON数据类型的数据,这时我们需要其他的传递数据的方式。首先需要增加html中的代码,如在“111111”按钮的点击事件增加代码:

  window.webkit.messageHandlers.AppModel.postMessage({body: 'call js alert in js'});

 

//H5,js调用IOS原生CheckLoginState方法

例如:window.webkit.messageHandlers.CheckLoginState.postMessage("");

AppModel是我们注入的对象,“()”中的内容是我们传递给客户端的数据。

客户端中需增加的代码:

// 注入JS对象名称AppModel,当JS通过AppModel来调用时,

 // 我们可以在WKScriptMessageHandler代理中接收到

 [config.userContentControlleraddScriptMessageHandler:selfname:@"AppModel"];

注意JS对象名称的一致性(这里的JS对象名称是“AppModel”)。
实现代理中的方法:

#pragma mark - WKScriptMessageHandler

- (void)userContentController:(WKUserContentController *)userContentController

      didReceiveScriptMessage:(WKScriptMessage *)message {

    

      NSLog(@"body:%@", message.body);

    NSDictionary * dic = message.body;

    NSString * urlStr = dic[@"body"];

    NSLog(@"urlStr:%@", urlStr);

    if ([message.nameisEqualToString:@"AppModel"]) {   // 打开外部链接

        NSLog(@"找到了注入的JS对象...");

    }

}

OC调用JS代码:

[self.webView evaluateJavaScript:@"jsFunction()" completionHandler:^(id _Nullable result, NSError * _Nullable error) {

                NSLog(@"==%@----%@",result, error);

            }];

jsFunction()是 js方法

--------------------- 
作者:梁森森 
来源:CSDN 
原文:https://blog.csdn.net/u010105969/article/details/53541088 
版权声明:本文为博主原创文章,转载请附上博文链接!

更多相关文章

  1. sqlit导入外部数据库查找数据方法
  2. Android NDK打印log到logcat的方法
  3. 工具:Android本地代码生成器
  4. Android很有用的代码片段
  5. Android获取系统时间的多种方法
  6. android上传图片到服务器,求服务器那边和android的Activity的完整
  7. Android 和 PHP 之间进行数据加密传输
  8. Android链式方法显示Dialog

随机推荐

  1. 指尖上的Android之实战篇--说明篇(二)
  2. Android变身iOS?联想5S可别吹了
  3. android TextView 显示不全的问题解决,此
  4. Android中去掉或更改标题栏TitleBar,theme
  5. 【android】拼图实现浅谈(类似美图秀秀拼
  6. 我为什么要从一名死忠iPhone用户叛逃到An
  7. Android模拟键盘输入功能的实现
  8. Android使用后台线程提高用户体验
  9. Smart Browser Chooser 依網路速度自動切
  10. Android(安卓)避免内存泄漏