Swift同步方式自定义WKWebView的UserAgent解决UserAgent第二次才生效的问题
2019-07-10 13:35:09  By: shinyuu

之前写过一篇 iOS开发Swift修改WKWebView默认的UserAgent,但好像是有点BUG的,因为上次的方式的使用异步的方式去获取和设置UserAgent,那么问题就出现了,当第一次打开网页的时候,并没有生效,必须要第二次打开网页的时候,我们自定义的UserAgent才会生效。后来研究了很久,通过同步的方式去设置解决了这个问题,来记录一下。


其实设置方法比异步的要简单很多。上代码:

override func viewDidLoad() {
    super.viewDidLoad()

    guard let url = URL(string: open_url) else{
        return
    }
    
    //若url无效会导致wkwebview崩溃
    if UIApplication.shared.canOpenURL(url) == false {
        return
    }

    self.automaticallyAdjustsScrollViewInsets = false
    self.view.backgroundColor = UIColor.white
    // Do any additional setup after loading the view.
    webView = WKWebView(frame: CGRect(x: 0, y:0, width: self.view.frame.size.width, height: self.view.frame.height-kNavbarH))
    webView.navigationDelegate = self
    webView.uiDelegate = self
    let request = URLRequest(url: url)
    webView.isHidden=true
    
    if var userAgent = webView.value(forKey: "userAgent") as? String {
        if userAgent.hasSuffix("AutohigoDMS") == false {
            userAgent  = "AutohigoDMS"
            // 设置global User-Agent
            self.webView.customUserAgent = userAgent
        }
    }
    self.view.addSubview(webView)
    webView.load(request)

    /**
     增加的属性:
     1.webView.estimatedProgress加载进度
     2.backForwardList 表示historyList
     3.WKWebViewConfiguration *configuration; 初始化webview的配置
     */
    webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
    
    progressView = UIProgressView(frame: CGRect(x: 0, y: (self.navigationController?.navigationBar.height)!-2, width: UIScreen.main.bounds.size.width, height: 3))
    progressView.trackTintColor = UIColor.white
    progressView.progressTintColor = RGBColor(141, g: 189, b: 76)
    self.navigationController?.navigationBar.addSubview(progressView)
    
    //返回事件
    let item = UIBarButtonItem.init(image: UIImage.init(named: "navbar_back"), style: .plain, target: self, action: #selector(backItemPressed))
    self.navigationItem.leftBarButtonItem = item
}


上面是整个自定义View的viewDidLoad方法,其实最核心的代码如下:

if var userAgent = webView.value(forKey: "userAgent") as? String {
    if userAgent.hasSuffix("AutohigoDMS") == false {
        userAgent  = "AutohigoDMS"
        // 设置global User-Agent
        self.webView.customUserAgent = userAgent
    }
}


通过以上的设置我们就可以的自定义WKWebView的UserAgent了

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

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

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

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

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

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


快速评论


技术评论

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