iOS 12 WKWebview设置customUserAgent无法正常工作吗?

时间:2018-07-16 07:17:53

标签: ios wkwebview ios12

设置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
}];

有人遇到同样的问题吗?

5 个答案:

答案 0 :(得分:7)

最后,我发现问题在于您无法在调用customUserAgent的validateJavaScript:iOS 12中的method之后更改它。这是我的代码

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"
        }
    }

答案 1 :(得分:0)

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

使用以下代码设置自定义用户代理可以在模拟器上运行,但不能在实际设备上运行,两者均运行iOS 12.0 Beta。

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

答案 2 :(得分:0)

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

enter image description here

答案 3 :(得分:0)

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,就永远无法对其进行修改。因此,您需要一个假的WKWebView来获取默认的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";

}];

答案 4 :(得分:-1)

将此添加到AppDelegate

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