我已经建立了一个包含WKWebView的应用程序,该Web视图加载的网站支持多种语言。我如何更改WKWebView中的Accept-Language
标头,或者更改其他HTTP标头呢?
我已经建立了一个包含WKWebView的应用程序,该Web视图加载的网站支持多种语言。我如何更改WKWebView中的Accept-Language
标头,或者更改其他HTTP标头呢?
private bool _headerIsSet
我在代理方法中每次发出请求时都会检查:
[Foundation.Export("webView:decidePolicyForNavigationAction:decisionHandler:")]
public void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action<WKNavigationActionPolicy> decisionHandler)
{
var request = navigationAction.Request;
// check if the header is set and if not, create a muteable copy of the original request
if (!_headerIsSet && request is NSMuteableUrlRequest muteableRequest);
{
// define your custom header name and value
var keys = new object[] {headerKeyString};
var values = new object[] {headerValueString};
var headerDict = NSDictionary.FromObjectsAndKeys(values, keys);
// set the headers of the new request to the created dict
muteableRequest.Headers = headerDict;
_headerIsSet = true;
// attempt to load the newly created request
webView.LoadRequest(muteableRequest);
// abort the old one
decisionHandler(WKNavigationActionPolicy.Cancel);
// exit this whole method
return;
}
else
{
_headerIsSet = false;
decisionHandler(WKNavigationActionPolicy.Allow);
}
}
GET
之外,还有另一个问题。它还假设将要拦截的请求会替换WebView的整个内容。这并不总是正确的:如果这样的次要请求旨在更改页面上的某些元素,例如显示的图像,则结果将远非预期。 - Alex Cohn只需在URL请求中像下面这样设置所需的语言ISO 639-1代码,就可以从服务器端获取用户首选或本地化语言响应。
var request = URLRequest(url: URL(string: "YourUrlStr"))
request.setValue("en", forHTTPHeaderField: "Accept-Language")
wkWebView.load(request)
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:YourUrlStr]];
[request setValue:@"en" forHTTPHeaderField:@"Accept-Language"];
[wkWebView loadRequest:urlRequest];
WKWebView支持开箱即用的本地化。您不需要设置“Accept-Language”头字段。
如果出于某种原因您需要这样做,以下是实现方法。
创建一个'URLRequest',使用所需网站初始化URL的实例。
var request = URLRequest(url: url)
request.setValue("de-de", forHTTPHeaderField: "Accept-Language")
webview.load(request)