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

Swift同步方式自定义WKWebView的UserAgent解决UserAgent第二次才生效的问题

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

之前写过一篇 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的留言板)

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