iOS开发Swift修改WKWebView默认的UserAgent以及执行JS代码
2018-12-21 15:34:07  By: dwtedx

在IOS APP开发的时候遇到一个需求,因某些原因,需要在 WKWebview 默认的 Useragent 中增加一些自定义的东西。经测试发现,WKWebview的 evaluateJavaScript("navigator.userAgent") 可以取到默认的 Useragent,那么我们修改也需要在这里修改。

webView.evaluateJavaScript("navigator.userAgent") {(info, error) in
    // 获取默认值
    if var userAgent = info as? String {
        // 添加自定义的内容
        if userAgent.hasSuffix("AutohigoDMS") == false {
            userAgent  = "AutohigoDMS"
            // 设置global User-Agent
            let dic = ["UserAgent": userAgent]
            UserDefaults.standard.register(defaults: dic)
            UserDefaults.standard.synchronize()
        }
    }
}


然后在分享一个方法,让WKWebview在加载完网页之后执行自定义的 js 代码以及 css 代码等,代码如下

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    progressView.setProgress(0.0, animated: false)
    self.navigationItem.title = webView.title
    
    var js = "document.getElementsByTagName("header")[0];"
    js.append("header.parentNode.removeChild(header);")
    js.append("document.getElementsByClassName(´detailcoller´)[0].remove();")
    webView.evaluateJavaScript(js) { (response, error) in
        print("response:", response ?? "No Response", "
", "error:", error ?? "No Error")
        webView.isHidden=false
    }
}


上面这个方法是直接执行的,比如隐藏title等操作,下面分享的这个方法是可以从网页中读取数据到我们App的

override func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    super.webView(webView, didFinish: navigation!)
    let js = "function getImages(){var imgScr = document.getElementsByTagName("img")[0].src;return imgScr;}"
    webView.evaluateJavaScript(js) { (response, error) in
        print("response:", response ?? "No Response", "
", "error:", error ?? "No Error")
        //webView.isHidden=false
    }
    //调用js
    webView.evaluateJavaScript("getImages()", completionHandler: {
        (any, error) in
        if (error != nil) {
            print("error:", error!)
        }
        self.srcUrl = any.debugDescription
        print("srcUrl======"   self.srcUrl!)
        //解决返回字符串中包含 Optional
        if nil != self.srcUrl && "nil" != self.srcUrl && "nil" != self.srcUrl && self.srcUrl!.contains("Optional") {
            self.srcUrl = self.srcUrl!.replacingOccurrences(of: "Optional(", with: "")
            self.srcUrl = self.srcUrl!.substring(to: self.srcUrl!.index(self.srcUrl!.startIndex, offsetBy: self.srcUrl!.count-1))
            print("srcUrl substring======"   self.srcUrl!)
        }
    })
    
}


以上就是我在使用WKWebview的时候觉得重要的地方,希望对大家有用

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+