`

swift -> WKWebView 注入JS文件

 
阅读更多

本文介绍的是在 初始化 webView 就 注入 js 文件 ,然后再 加载每个地址的时候 都能调用这个JS文件里的方法

 

准备 Abc.js 放到跟目录

if (!this.__testjs__) {
    __testjs__ = {};
}

__testjs__.Class1 = {
    
hideLogo: function (str) {
    //logo 将消失
    var element = document.getElementById("logo")
    element.innerHTML = str
    return document.title
},
    
    
    
    
};

目录位置  



 

然后是swift 文件 

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let webView = WKWebView(frame: CGRect(x: 0, y: 50, width: screenWidth, height: screenHeight-50))
        //初始化WebView 时将JS注入webView
        if let path = Bundle.main.path(forResource: "Abc", ofType: "js") {
            let source = NSString(data: NSData(contentsOfFile: path) as! Data, encoding: UInt(String.Encoding.utf8.hashValue));
            let userScript = WKUserScript(source: source as! String, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)
            webView.configuration.userContentController.addUserScript(userScript)
        }
        self.view.addSubview(webView)
        let url:String = "http://m.baidu.com"
        webView.load(NSURLRequest(url: NSURL(string: url) as! URL) as URLRequest);
        
        
        // 3.5 秒后执行 JS 代码 ,一般情况都是 在webView 加载完成后才执行
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3.5){
            webView.evaluateJavaScript("__testjs__.Class1.hideLogo('sddd')") { (response, error) in
                if error != nil {
                    print(" error: ")
                } else {
                    print(response as! String)
                }
            }
        }
        
}

 

 

效果就是 打开m.baidu.com 后一会, logo 消失 并显示 sdd

 

  • 大小: 18.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics