在iPad上更改iOS应用的UserAgent

时间:2016-11-20 15:04:17

标签: ios swift wkwebview

Hy大家。

我制作了一个使用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但它不断请求一些桌面网站。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试将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中无法实现这种方式。