欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

iOS开发Swift修改WKWebView默认的UserAgent以及执行JS代码

程序员文章站 2021-12-28 21:38:15
...

在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的时候觉得重要的地方,希望对大家有用