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
- 1. Intestazioni richieste HTTP personalizzate in HTML
- 2. Passa intestazioni HTTP personalizzate a richieste RESTful
- 3. Come impostare intestazioni http personalizzate quando si modifica iframe src?
- 4. È possibile impostare intestazioni HTTP personalizzate nella WebView
- 5. Come codificare intestazioni HTTP personalizzate in C#
- 6. SDWebImage e impostazione di intestazioni HTTP personalizzate?
- 7. Come aprire un url usando javascript e impostare intestazioni HTTP personalizzate per la richiesta?
- 8. È possibile distinguere le richieste HTTP effettuate via 3G da altre richieste
- 9. Aggiunta di intestazioni HTTP personalizzate utilizzando JavaScript
- 10. ServiceStack JsonServiceClient - Intestazioni HTTP personalizzate non inviate
- 11. Akka-http: Come impostare intestazioni di risposta
- 12. Richieste HTTP e intestazioni querystring vs?
- 13. È possibile effettuare richieste di dominio incrociato in Javascript e impostare intestazioni personalizzate?
- 14. Aprire la richiesta in Safari con intestazioni HTTP personalizzate
- 15. Passaggio di intestazioni di richieste personalizzate in loopback
- 16. Posso copiare l'elenco delle richieste HTTP effettuate da una pagina Web dal pannello Net di Firebug?
- 17. AngularJS $ intestazioni personalizzate risorsa
- 18. Modifica intestazioni HTTP per una richiesta JSONP
- 19. Intestazione personalizzata http AngularJS $ http per tutte le richieste
- 20. Accesso alle intestazioni delle richieste personalizzate nodo express
- 21. Intestazioni personalizzate PHP cURL
- 22. Posso limitare le richieste effettuate da un'app distribuita?
- 23. Imposta intestazioni HTTP per tutte le richieste in un test pallone.
- 24. Come impostare le intestazioni per DeleteAsync
- 25. Richieste di intercettazione effettuate da WebBrowser in C#
- 26. Come posso effettuare richieste tra domini con intestazioni personalizzate senza utilizzare XDomainRequest o XMLHttpRequest?
- 27. Come rimuovere alcune intestazioni HTTP aggiunte da RestTemplate di Spring?
- 28. Come si aggiungono intestazioni HTTP personalizzate alle schede personalizzate di Chrome?
- 29. Come rispondere alle richieste HTML effettuate tramite AJAX in Rails
- 30. REST: intestazioni HTTP personalizzate rispetto ai parametri URL
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