Как настроить пользовательские заголовки HTTP на запросы, сделанные WKWebView

Я создал приложение, которое включает WKWebView, и веб-сайт, который загружает веб-просмотр, поддерживает несколько языков. Как я могу изменить заголовок Accept-Language в WKWebView или другие заголовки HTTP, если на то пошло?

У меня это работает в некотором смысле, но только запросы будут иметь настраиваемый заголовок. Как ответил Джебелькин, связанный с комментарием Габриэля Картье на ваш вопрос, вам придется манипулировать запросом и загрузить его заново.

У меня есть работа для GET-запросов:

(это в xamarin 0> c #, но я думаю, вы получите идею)

я создал частное поле

 private bool _headerIsSet 

которые я проверяю каждый раз, когда запрос выполняется в методе 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); } } 

Как я уже сказал, это работает только для GET- Requests. Так или иначе, POST -Requests не содержат данные тела исходного запроса (request.Body и request.BodyStream равны null), поэтому muteableRequest (который является немой копией исходного запроса) не будет содержать данные тела первоначальный запрос.

Надеюсь, это поможет вам или другим людям, которые подходят к одной и той же проблеме.

Изменить: для ваших нужд установите «Accept-Language» в качестве ключа

  • WebKit Audio искажается на iOS 6 (iPhone 5) впервые после включения питания
  • Ошибка прокрутки Webkit
  • UIWebView застрял после webViewDidStartLoad
  • iOS 8 UIWebview Delegate: WebKit отменил неперехваченное исключение в webView: didFinishLoadForFrame:
  • -webkit-overflow-scrolling: touch разбивает мой -webkit-scrollbar css в iOS
  • Каковы последствия использования неподдерживаемого свойства WebKit?
  • Получение всех файлов cookie из WKWebView
  • как заставить текстовый файл с настраиваемым расширением открываться в myApp, а не отображаться как текст в Safari
  • iOS 9 `-webkit-overflow-scrolling: touch` и` overflow: scroll` перерывы прокрутки
  • PhoneGap + iOS Запретить действие прокрутки по умолчанию начинается с текстового поля ввода
  • Прокрутка прокрутки IOS -webkit-overflow на неправильной оси или вообще не
  • Interesting Posts

    На iOS вы можете использовать UICollectionViewFlowLayout для получения вертикальной раскладки столбцов?

    iOS Custom Container VC и дети, требующие определенной ориентации

    Обратный вызов HTML5 Audio не работает на сафари / iOS

    iOS: Почему при запуске появляется предупреждение «Включить службы местоположения» дважды?

    SDWebImage не загружает удаленные изображения до прокрутки

    Присутствие UITextField и Pixate Freestyle Crashes на iOS 9

    Как я могу использовать IBOutletCollection для подключения нескольких UIImageView к одной и той же розетке?

    Программно изменить высоту и ширину UIImageView Xcode Swift

    Объекты, проведенные до конца приложения: нет Dealloc в порядке?

    Использование текстурных кешей OpenGL ES вместо glReadPixels для получения данных текстуры

    Связь с зонтичной структурой

    AlertController не находится в иерархии окон

    Как обрабатывать параметры запуска в Swift 3 при прослушивании уведомления? Получение синтаксических проблем

    Можно ли использовать rsync внутри приложения iOS?

    Анимированное перемещение и поворот UIView не совсем

    Давайте будем гением компьютера.