您的位置:

webviewjs事件,webview 执行js

本文目录一览:

iOS WKWebView与H5交互,JS调OC传值、OC调JS传值、进度条加载等(干货满满)

WKWebView是苹果在iOS 8之后推出的框架,关于它比webview的优势这里就不讲了。主要说一下与JS交互的问题,其实WKWebView已经内置了JS与OC的互调、传值等方法,使用起来也非常方便,下面就来细细的探讨一下以及自己遇到过的坑...

首先来看下WKWebView的初始化相关设置:

一、导入相关头文件、设置相关代理和属性

二、WKWebView初始化

注意:

楼主遇到的第一个坑:如果JS给OC传值为空,必须写成: postMessage(null),如果什么都不写,方法是调不通的。

1、在viewWillAppear中配置, addScriptMessageHandler name: "这里就是JS的方法,方法名必须统一"

楼主遇到的第二个坑:配置完后必须在 viewWillDisappear 中 remove,否则会造成循环引用,导致crash

2、实现 WKScriptMessageHandler 协议

以上就是JS调OC,JS向OC传值...

楼主这里举三个例子:

1: webview加载完成前,将用户信息传给js

2: webview加载完成,将相关信息传给js

3: 调用相册或相机时,将选择的图片请求后台接口,后台返回图片地址,将该地址回传给H5,H5将图片显示到页面上

第一个例子: webView加载完成前传值

因为 evaluateJavaScript 方法默认是在加载完成后调用,所以直接在页面开始加载中调用是传不过去的,这个时候怎么办呢? 我们可以让js端写两个方法, 第一个方法是js端开始向oc端发起信息需求的方法名,当oc端收到该方法名的时候,就去调用js端第二个获取传值的方法,把信息传递过去。

先让JS端写个方法调OC,OC实现方法后在这个方法内部给JS传值

在WKScriptMessageHandler协议中,实现该方法,然后在方法内部给JS传值

注意: 以上就是在Webview加载完成前传值,如果打印没报错,证明传参成功,如果web端没收到,让他把获取到值的方法写到页面中即可。

第二个例子: webView加载完成,传值给js

第三个例子: 传图片地址给js,js拿到后显示图片

1:拍照事件

1.1:将拍的照片请求上传图片接口,成功返回图片地址,并传值给H5

2: 从相册中选取照片

2.2:将相册中选取的照片请求上传图片接口,成功返回图片地址,并传值给H5

注意: getPhotoCallback 即为调用的方法名,后面传值格式必须为: ('') , 这里遇到了第三个坑, 如果方法名写为: 名称.名称 (例如:hello. getPhotoCallback),这种是调不通的,可以写成hello_getPhotoCallback的形式,一般的话最好还是定义一个完整的名称。 刚开始这个问题卡了比较久,一直调不通,在此记录一下.....

在 viewDidLoad 中注册进度条监听

开始加载网页

加载完成

加载失败

页面跳转失败

progressView懒加载

添加监听观察者

最后别忘记 removeObserver

Demo地址:

Android webview中的js如何监听键盘事件

首先,设置webView属性:

其次,设置WebChromeClient:

如此,webView中就可以捕获javascript的alert()、confirm()事件了。

WKWebView js方法的使用

一、h5 调用 OC,给OC传值

   1、在WKWebview初始化的时候,先注册JS方法

       //这个类主要用来做native与JavaScript的交互管理

       WKUserContentController * wkUController = [[WKUserContentController alloc] init];

        //注册一个name为jsToOcNoPrams的js方法,设置处理接收JS方法的代理

        [wkUController addScriptMessageHandler:self  name:@"jsToOcNoPrams"];

       [wkUController addScriptMessageHandler:self name:@"jsToOcWithPrams"];

        config.userContentController = wkUController;

2、拦截js方法,接收参数

注意:遵守WKScriptMessageHandler协议,代理是由WKUserContentControl设置

  //通过接收JS传出消息的name进行捕捉的回调方法

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{

    NSLog(@"name:%@\\\\n body:%@\\\\n frameInfo:%@\\\\n",message.name,message.body,message.frameInfo);

    //用message.body获得JS传出的参数体

    NSDictionary * parameter = message.body;

    //JS调用OC

    if([message.name isEqualToString:@"jsToOcNoPrams"]){

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"js调用到了oc" message:@"不带参数" preferredStyle:UIAlertControllerStyleAlert];

        [alertController addAction:([UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

        }])];

        [self presentViewController:alertController animated:YES completion:nil];

    }else if([message.name isEqualToString:@"jsToOcWithPrams"]){

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"js调用到了oc" message:parameter[@"params"] preferredStyle:UIAlertControllerStyleAlert];

        [alertController addAction:([UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

        }])];

        [self presentViewController:alertController animated:YES completion:nil];

    }

}

3、在webview释放注销之前移除js方法

      //移除注册的js方法

        [[_webView configuration].userContentController removeScriptMessageHandlerForName:@"jsToOcNoPrams"];

二、oc调用H5,给H5传值

1、//OC调用JS changeColor()是JS方法名,completionHandler是异步回调block

    NSString *jsString = [NSString stringWithFormat:@"changeColor('%@')", @"Js参数"];

    [_webView evaluateJavaScript:jsString completionHandler:^(id _Nullable data, NSError * _Nullable error) {

        NSLog(@"改变HTML的背景色");

    }];

//改变字体大小 调用原生JS方法

    NSString *jsFont = [NSString stringWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%d%%'", arc4random()%99 + 100];

    [_webView evaluateJavaScript:jsFont completionHandler:nil];

2、// 页面加载完成之后调用

- (void)webView:(WKWebView*)webView didFinishNavigation:(WKNavigation*)navigation{

    [SVProgressHUDdismiss];

NSString* jsStr = [NSStringstringWithFormat:@"payResult('%@')",@"true"];

[self.webView evaluateJavaScript:jsStrcompletionHandler:^(id_Nullable result,NSError* _Nullable error) {

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

    }];

}

webviewjs事件,webview 执行js

2022-11-25
webviewjs发请求(webview的网络请求)

本文目录一览: 1、WKWebView js方法的使用 2、webview 与js怎样实现数据交互 3、android中webview与js交互 4、UIWebView怎么拦截到网页里面JS发起的Aj

2023-12-08
webview禁用js,webview禁用复制

2022-11-24
js和webview,Js和webview交互

2022-11-23
安卓运行js代码,安卓 运行js

本文目录一览: 1、android里如何调用Js里的函数 2、nodejs 在 android 系统里面怎么运行 3、android 中如何去执行js脚本 4、Android调用js的问题 andro

2023-12-08
web无法执行js,web项目无法运行

本文目录一览: 1、新建的java web工程中jsp无法调用js文件 2、WebView中的JavaScript为什么不执行 3、webview死活不执行js代码? 4、javaweb上js不响应

2023-12-08
java执行js对象,js函数执行

本文目录一览: 1、JavaScript的对象怎么在java后台调用 2、java程序中运行js脚本 3、javascript中怎样用java中的对象 JavaScript的对象怎么在java后台调用

2023-12-08
安卓调试apk的js,apk运行

本文目录一览: 1、在android中怎样调用本地js文件里的方法并得到返回值 2、Android调用js的问题 3、android 中怎么执行js脚本 4、android里如何调用Js里的函数 5、

2023-12-08
webview交互js,webview html5

本文目录一览: 1、iOS下webView和JS交互 2、iOS中WkWebView与js交互 3、android中webview与js交互 iOS下webView和JS交互 下面说一下使用方法 申明

2023-12-08
htmljs编程笔记(html代码笔记)

本文目录一览: 1、html代码和JS代码有什么区别 2、如何在html中调用js函数 3、JavaScript学习笔记之数组基本操作示例 4、HTML5初学者笔记 5、《web前端笔记7》js字符—

2023-12-08
ios无法执行js,ios自动执行

本文目录一览: 1、iPhone的浏览器无法执行JS代码是什么情况? 2、ios返回不执行js怎么解决 3、苹果手机出现不受支持的计划: Javascript Javascript:void(0)怎么

2023-12-08
安卓js调用java保存文件在本地(java下载文件夹到本地

本文目录一览: 1、JS怎样调用Android本地原生方法 2、如何在android平台上使用js直接调用Java方法 3、在Android上怎样实现JAVA和JS交互 4、在android中怎样调用

2023-12-08
java中执行js(java中执行sql语句)

本文目录一览: 1、如何在java中调用js方法 2、如何通过java代码调用js 3、java用什么调用js代码 4、java怎么调用javascript 5、java程序中运行js脚本 6、请问怎

2023-12-08
重学java笔记,java笔记总结

2022-11-23
C# WebView控件完全指南

2023-05-21
native代码如何调js,native怎么说

本文目录一览: 1、hybrid App中js调用native接口原理 2、怎么在web worker启动的js线程调用native.js 3、在Android上怎样实现JAVA和JS交互 4、rea

2023-12-08
js中调用java的方法,java调用js代码 实例

本文目录一览: 1、怎么实现javascript中调用java类中的方法 2、如何在JAVASCRIPT调用Android JAVA函数 3、js怎么调用JAVA方法 怎么实现javascript中调

2023-12-08
javascript简要笔记,JavaScript读书笔记

2022-11-17
webjs怎么加载(js加载页面)

本文目录一览: 1、android 怎么在webview中加载 js文件 2、如何在用js处理页面首次加载的问题 3、高性能web开发 如何加载JS,JS应该放在什么位置 4、intellij ide

2023-12-08
javaweb转换js,html转java

本文目录一览: 1、intellij idea java web怎么引入js 2、java web中javascript主要用哪些 3、如何在WebView中通过Java传递给JS数组 4、在java

2023-12-08