【问题标题】:iOS 12 WKWebview set customUserAgent not work?iOS 12 WKWebview 设置 customUserAgent 不起作用?
【发布时间】:2018-12-23 16:27:15
【问题描述】:

设置 wkwebview customUserAgent 时,iOS 12 中似乎存在错误。在 webView:didFinishNavigation: 方法中我打印 customUserAgent 并与 webivew.evaluateJavaScript 结果进行比较。它是不同的。

NSLog(@"user-agent is %@"); //Get a custom user-agent
[self.webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
    NSLog(@"user-agent is %@", result); //Get a default  user-agent
}];

有人看到同样的问题吗?

【问题讨论】:

    标签: ios wkwebview ios12


    【解决方案1】:

    最后,我发现问题是在 iOS 12 中调用其 evaluateJavaScript: 方法后无法更改 customUserAgent。这是我的代码

    self..webView.evaluateJavaScript("navigator.userAgent") { [weak self] (result, error) in
                self?.webView.customUserAgent = result as? String + "customAgent" //not work
            }
        }
    

    您可以初始化一个 UIWebview 或另一个 WKWebiview 以获取当前的用户代理并在其后附加您的自定义用户代理。

    self.tempWebView.evaluateJavaScript("navigator.userAgent") { [weak self] (result, error) in
            if self == nil || error != nil {
                return
            }
            if let userAgent = result as? String {
                self?.webView.customUserAgent = userAgent + "custom agent"
            }
        }
    

    【讨论】:

      【解决方案2】:

      以上建议的答案似乎对我不起作用。

      使用以下代码设置自定义用户代理适用于模拟器,但不适用于运行 iOS 12.0 Beta 的实际设备。

      webView.customUserAgent = [NSString stringWithFormat:@"%@ %@", userAgent, @"custom agent"];

      【讨论】:

      • 你在设置这个之前调用了webview的方法吗?
      • 不,我在设置之前没有调用任何 webview 方法。
      【解决方案3】:

      将此添加到 AppDelegate

      UserDefaults.standard.register(defaults: ["UserAgent": "custom value"])
      

      【讨论】:

      • 任何关于你在做什么和链接的解释都会有帮助
      【解决方案4】:

      我发现了同样的问题,这是屏幕截图。 WKWebView 似乎是 iOS 12 的问题。

      【讨论】:

        【解决方案5】:

        iOS 12,如果你这样调用修改你的UA,它将不起作用

        [self.wkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(NSString* _Nullable oldUA, NSError * _Nullable error) {
        
        
            // modify ua
            self.wkWebView.customUserAgent = @"you custom ua";
        
        }];
        
        

        一旦你调用navigator.userAgent,你就永远不能修改它。所以你需要一个 fakeWKWebView 来获取默认的 UA 并设置为你真正的 WKWebView

        self.fakeWKWebView = [[WKWebView alloc] init];
        
        [self.fakeWKWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(NSString* _Nullable oldUA, NSError * _Nullable error) {
            self.fakeWKWebView = nil;
        
            // modify ua
            self.wkWebView.customUserAgent = @"you custom ua";
        
        }];
        

        【讨论】:

          猜你喜欢
          • 2018-07-21
          • 1970-01-01
          • 1970-01-01
          • 2019-03-12
          • 1970-01-01
          • 2018-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多