美文网首页
[iOS]解决使用WKScriptMessageHandler与

[iOS]解决使用WKScriptMessageHandler与

作者: 流火绯瞳 | 来源:发表于2017-12-22 15:14 被阅读758次

    在使用WKScriptMessageHandler与JS交互的时候会引起内存泄露, 为了解决此问题, 简单进行了封装, 代码不多, 直接给出:

    //
    //  LQ.swift
    //  WKWebTest
    //
    //  Created by Artron_LQQ on 2017/11/28.
    //  Copyright © 2017年 Artup. All rights reserved.
    //
    /*
     解决使用 WKUserContentController 实例时的内存泄露问题:
     将
     let user = WKUserContentController()
     // 向js中注入协议, 作为ios和js交互的依据
     user.add(self, name: "appProtocol")
     
     改为:
     let user = WKUserContentController()
     // 向js中注入协议, 作为ios和js交互的依据
     user.add(LQScriptMessage.init(self), name: "appProtocol")
     
     或者使用方法
     user.addHandler(self, name: "appProtocol")
     即可!
     */
    
    
    import UIKit
    import WebKit
    
    class LQScriptMessage: NSObject, WKScriptMessageHandler {
    
        weak var delegate: WKScriptMessageHandler?
        
        init(_ delegate: WKScriptMessageHandler) {
            super.init()
            
            self.delegate = delegate
        }
        
        func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
            
            self.delegate?.userContentController(userContentController, didReceive: message)
        }
    }
    
    extension WKUserContentController {
        func addHandler(_ message: Any, name: String) {
            if let msg = message as? WKScriptMessageHandler {
                self.add(LQScriptMessage(msg), name: name)
            }
        }
    }
    

    使用的时候也很简单, 只需要将原先的使用方式:

    let user = WKUserContentController()
     // 向js中注入协议, 作为ios和js交互的依据
     user.add(self, name: "appProtocol")
    

    替换为:

     let user = WKUserContentController()
     // 向js中注入协议, 作为ios和js交互的依据
     user.add(LQScriptMessage.init(self), name: "appProtocol")
    

    或者直接使用WKUserContentController扩展里的自定义方法:

     let user = WKUserContentController()
     // 向js中注入协议, 作为ios和js交互的依据
     user.addHandler(self, name: "appProtocol")
    

    即可!

    相关文章

      网友评论

          本文标题:[iOS]解决使用WKScriptMessageHandler与

          本文链接:https://www.haomeiwen.com/subject/kfxxgxtx.html