iOS WKWebView响应JS调用



web端按照以下方式调用wkwebview的回调函数:

window.webkit.messageHandlers.<方法名>.postMessage(<参数>);



实例如下:

    function saveImage(url){
        var message = {
            'method' : 'saveImage',
            'args' : {
                'url' : url,
            },
        };
        window.webkit.messageHandlers.saveImage.postMessage(message);
        return url;
    }



iOS端需要注意内存泄露问题!
创建一个代理对象,然后通过弱引用的方式调用self!

class WebVCJSDelegate: NSObject,WKScriptMessageHandler {

    weak var scriptDelegate:WKScriptMessageHandler! = nil
    
    init(scriptDelegate:WKScriptMessageHandler) {
        self.scriptDelegate = scriptDelegate
    }
    
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage){
        
        self.scriptDelegate.userContentController(userContentController, didReceive: message)
    }
}



初始化WKWebView的代码:

        let conf:WKWebViewConfiguration = WKWebViewConfiguration.init()
        let prefer:WKPreferences = WKPreferences.init()
        prefer.javaScriptEnabled = true
        conf.preferences = prefer
        conf.allowsInlineMediaPlayback = true

        let userContentCtrl:WKUserContentController = WKUserContentController.init()
        self.jsDelegate = WebVCJSDelegate.init(scriptDelegate: self) //防止内存泄露
        userContentCtrl.add(jsDelegate, name: "saveImage") //查看图片的JS函数
        conf.userContentController = userContentCtrl
        
        webView = WKWebView.init(frame: CGRect.zero, configuration: conf)



实现WKScriptMessageHandler协议,即可在js调用时执行协议的回调方法:

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage){
        
        let body = message.body
        print(body)
    }




参考文章:
iOS WKWebView与JS交互

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS中,通过WKWebView调用JS并传递多个参数的实现步骤如下: 1. 在JS代码中定义需要调用的函数,并将需要传递的参数作为函数的参数。 例如,定义一个名为testFunc的函数,该函数有两个参数param1和param2: ``` function testFunc(param1, param2) { // ... } ``` 2. 在iOS中,通过WKWebView的evaluateJavaScript方法调用JS函数并传递参数。 例如,调用上述testFunc函数并传递参数值为"hello"和"world"的示例代码如下: ``` NSString *jsFunction = [NSString stringWithFormat:@"testFunc('%@', '%@')", @"hello", @"world"]; [webView evaluateJavaScript:jsFunction completionHandler:^(id _Nullable result, NSError * _Nullable error) { // ... }]; ``` 其中,NSString *jsFunction为需要调用JS函数及其参数的字符串形式,evaluateJavaScript方法会将该字符串作为JS代码执行。 在上述代码中,使用NSString的stringWithFormat方法拼接JS函数及其参数的字符串形式,并将该字符串作为evaluateJavaScript方法的参数传入。注意,由于JS中字符串需使用单引号括起来,所以需要在NSString的格式化字符串中使用单引号。 3. 在JS中,通过arguments对象获取传递的参数。 例如,在上述testFunc函数中获取参数值的示例代码如下: ``` function testFunc(param1, param2) { console.log(arguments[0]); // 输出"hello" console.log(arguments[1]); // 输出"world" } ``` 通过arguments对象可以获取传递的参数值,其下标从0开始。 通过以上步骤,即可在iOS调用JS函数并传递多个参数。注意,如果需要传递的参数较多,可以使用数组等数据结构来进行传递。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值