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