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

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

One Solution collect form web for “Как настроить пользовательские заголовки HTTP на запросы, сделанные WKWebView”

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

У меня есть работа для 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» в качестве ключа

  • событие touchMove на мобильном сафари - приводит к перетаскиванию всей страницы
  • UIWebView позволяет использовать свойствоInlineMediaPlayback для 4.2 на iPad
  • iOS 8 UIWebview Delegate: WebKit отменил неперехваченное исключение в webView: didFinishLoadForFrame:
  • Ошибка прокрутки Webkit
  • Как прокрутить палец прокрутки прокручиваемого div с помощью "webkit-overflow-scrolling: touch"
  • Проведите анимацию в CSS3
  • iOS: сбой WebKitLegacy
  • Получение всех файлов cookie из WKWebView
  • Быстрый переход в UIWebView и WKWebView
  • WKWebView падает в ускоренном режимеAnimationDidStart
  • Как узнать, воспроизводит ли WKWebView аудио?
  • Interesting Posts

    Для PubNub iOS SDK 4.0 максимальное количество каналов, на которые может подписаться клиент, без включения контроллера потока?

    drawRect не отражает изменения, внесенные в слой

    Сохранять исходные данные изображения с измененными метаданными (без повторного кодирования) на iOS

    Поведение на рабочем столе против iPad

    Получить индексную ячейку ячейки в центре коллекцииView в swift?

    Вертикальная флип-анимация UIView

    Как создать приложение Iphone без MAC OS

    Почему / когда мне нужно дважды нажать, чтобы запустить клик по iOS

    Можно ли изменить отображение отображаемого имени пакета в зависимости от страны?

    Действительно застрял на экране вращения iOS 6, мне нужен xib, заблокированный для портрета

    Класс не найден, вместо этого используется NSManagedObject по умолчанию

    Проблема с iOS JUCE-библиотекой с 64-битной архитектурой

    Различные считыватели штрих-кодов бесплатно SDK в iOS

    Как получить доступ к локальному хранилищу HTML5, созданному PhoneGap в iOS?

    Как сохранить значение bool в KeychainItemWrapper

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.