【问题标题】:Change the UserAgent of iOS app on iPad在 iPad 上更改 iOS 应用的 UserAgent
【发布时间】:2016-11-20 15:04:17
【问题描述】:

大家好。

我正在制作一个使用 WKWebView 的移动应用程序。

当我在 iPhone 中加载一些网站时,它会返回移动网站,但是当我尝试在 iPad 中加载一些网站时,它会请求桌面网站,我想制作一个在桌面和移动网站之间切换的按钮。

我在 iPad 上尝试过,但没有成功:

self.webView.customUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72"

如您所见,我尝试强制 iPad 中的 webView 使用 iPhone userAgent,但它一直在请求一些桌面站点。

如果你们需要更多我的代码,我很乐意提供。

谢谢!

【问题讨论】:

    标签: ios swift wkwebview


    【解决方案1】:

    您可以尝试像这样子类化您的 webview:

    class CustomWebView: WKWebView {
        override func loadRequest(request: NSURLRequest) -> WKNavigation? {
            guard let mutableRequest = request.mutableCopy() as? NSMutableURLRequest else {
                return super.loadRequest(request)
            }
            mutableRequest.setValue("Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72", forHTTPHeaderField: "User-Agent")
            return super.loadRequest(mutableRequest)
        }
    }
    

    正如这个答案中提出的https://stackoverflow.com/a/37474812/2579725

    只改变第一个用户代理。我在 UIWebView 中为每个请求覆盖它所做的是:

    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSMutableURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    
        if ([request isKindOfClass:[NSMutableURLRequest class]])
        { 
             [request setValue:@"Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72" forHTTPHeaderField:@"User-Agent"];
        }
        return YES;
    }
    

    我的研究结果表明,这种方式在 WKWebView 中是不可能的。

    【讨论】:

      【解决方案2】:

      preferredContentMode 非常适合您,

      iOS 13.0 或更新版本,

      lazy var web: WKWebView = {
              let configuration = WKWebViewConfiguration()
              if #available(iOS 13.0, *) {
                  configuration.defaultWebpagePreferences.preferredContentMode = .mobile
              }
              let vv = WKWebView(frame: UIScreen.main.bounds, configuration: configuration)
              vv.navigationDelegate = self
              return vv
          }()
      

      你可以在这里查看结果:

       func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
              
              web.evaluateJavaScript("window.navigator.userAgent;") { res, err in
                  if let word = res as? String{
                      print(word)
                  }
              }
              
      

      • 原始代理是

      Mozilla/5.0(Macintosh;Intel Mac OS X 10_15_4)AppleWebKit/605.1.15(KHTML,如 Gecko)


      设置后

      .preferredContentMode = .mobile

      • 新代理是

      Mozilla/5.0(iPad;CPU OS 13_7,如 Mac OS X)AppleWebKit/605.1.15(KHTML,如 Gecko)Mobile/15E148}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多