Ho creato un'app che include un WKWebView e il sito Web caricato dalla vista Web supporta più lingue. Come posso cambiare l'intestazione Accept-Language
in un WKWebView o altre intestazioni HTTP per quella materia?Come impostare intestazioni HTTP personalizzate per richieste effettuate da un WKWebView
risposta
Ho funzionato in un modo, ma solo ottenere richieste avrà l'intestazione personalizzata. Come ha risposto jbelkins nel link così dal commento di Gabriel Cartiers alla tua domanda, dovrai manipolare la richiesta e caricarla di nuovo.
ho ottenuto che funziona per get-domande come questa:
(è in Xamarin 0> C#, ma penso che si ottiene l'idea)
ho creato un campo privato
private bool _headerIsSet
che controllo ogni volta che viene effettuata una richiesta nel metodo deligate:
[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);
}
}
Come ho detto, questo funziona solo per GET -Richieste. In qualche modo, POST -Richieste non contengono i dati del corpo della richiesta originale (request.Body e request.BodyStream sono null), quindi la muteableRequest (che è una copia mutabile della richiesta originale) non conterrà i dati del corpo della richiesta originale.
Spero che questo possa aiutare voi o altri che si avvicinano allo stesso problema.
Edit: Per le vostre esigenze, impostare "Accept-Language" come chiave
questo è una specie di un duplicato di http://stackoverflow.com/questions/28984212/how-to-add-httpheader -in-request-global-for-ios-swift/37474812 # 37474812 Vedere la mia risposta su questa domanda e funzionerà. Ho testato Accept-Language e può essere sovrascritto. –
Questa soluzione funziona solo per la richiesta iniziale, non per le risorse secondarie. – mservidio