【问题标题】:Request desktop site WKWebview not working in Swift 4请求桌面站点 WKWebview 在 Swift 4 中不起作用
【发布时间】:2018-07-30 19:09:31
【问题描述】:

我几乎尝试了所有方法,一个 stackoverflow 和其他网站在 WKWebview 中请求桌面版网站,但没有一个解决方案适合我。

我尝试过的链接如下

https://stackoverflow.com/a/38228810/3145189

https://stackoverflow.com/a/38228810/3145189

https://stackoverflow.com/a/49646773/3145189

https://stackoverflow.com/a/48155481/3145189

我尝试在上面的线程上通过评论答案来获得答案,但没有得到回复,所以我在这里提出我的问题,我希望你不会将其标记为重复

这是我尝试过的众多实现之一

import UIKit
import WebKit

class ViewController: UIViewController {
    var webview: WKWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let config = WKWebViewConfiguration()
        webview = WKWebView(frame: self.view.frame, configuration: config)
        self.webview.uiDelegate = self


        let url = URL(string: "https://quora.com/")!
        var request = URLRequest(url: url)
        let userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36"
        request.addValue(userAgent, forHTTPHeaderField: "User-Agent")
        webview.load(request)

        //webview.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36"
        self.view.addSubview(webview)

    }
}

extension ViewController: WKUIDelegate {
}

我会要求,请在发布答案之前测试您的答案或建议,因为我已经尝试了很多其他的东西。

编辑-

上面的示例代码工作正常,问题是更改用户代理不立即反映,重新安装用户代理更改确实反映,所以我的问题是如何使用按钮切换请求桌面站点。

【问题讨论】:

  • 正确设置属性customUserAgent应该足够了
  • 我试过但没用 - webview.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36 "
  • Quora 网站将是一个响应式网站,它将根据屏幕宽度设置样式,而不仅仅是用户代理。您可能需要调整 web 视图的大小/缩放级别,这可能会有所帮助
  • Quora 网站在 safari 应用程序、UIWebView 请求桌面站点时运行良好,以及我尝试使用其他站点

标签: ios swift wkwebview user-agent


【解决方案1】:

这是我测试过的代码:

class ViewController: UIViewController {

    var webview: WKWebView?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        createWebView()
        if let url = URL(string: "https://quora.com") {
            load(url: url)
        }
    }

    private func createWebView() {
        let config = WKWebViewConfiguration()
        let webview = WKWebView(frame: self.view.frame, configuration: config)
        webview.uiDelegate = self
        webview.navigationDelegate = self
        self.webview = webview
        self.view.addSubview(webview)
    }

    private func load(url: URL) {
        var request = URLRequest(url: url)
        let userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36"
        request.addValue(userAgent, forHTTPHeaderField: "User-Agent")
        webview?.load(request)
    }
}

extension ViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("\(#function)")
    }

    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        print("\(#function): \(error)")
    }
}

extension ViewController: WKUIDelegate {

}

结果页面:

干杯!

【讨论】:

  • 谢谢它工作正常,但现在我发现我的示例代码也工作正常:),所以问题是缓存更改用户代理不要反映重新运行,一旦我重新-安装应用程序,它工作正常,你能建议我应该怎么做才能立即反映用户代理的变化吗?
  • request.cachePolicy = .reloadIgnoringLocalAndRemoteCacheData
猜你喜欢
  • 1970-01-01
  • 2018-07-12
  • 2018-07-21
  • 1970-01-01
  • 2017-07-11
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多