Подтвердить что ты не робот

Изменение источника WKWebView в приложении iOS

У меня есть гибридное приложение iOS, сосредоточенное вокруг WKWebView загрузки локальных веб-ресурсов с loadFileURL. WKWebView связывается с HTTPS с внутренним API с помощью jQuery.ajax. Приложение является мобильным, и я хочу, чтобы API также был "мобильным". То есть я хочу заблокировать браузеры, такие как Chrome и Firefox, с помощью API.

Моя стратегия - установить заголовок Access-Control-Allow-Origin на ответы API следующим образом:

Access-Control-Allow-Origin: app://myApp

Можно ли изменить начало WKWebView на app://myApp, чтобы браузеры не запрашивали API?

4b9b3361

Ответ 1

Случай: 1

Вы можете ввести JS в WKWebview в момент создания документа или закончить загрузку документа и подключить java script метод XMLHTTPRequest open с помощью вашей пользовательской реализации, чтобы добавить этот настраиваемый заголовок для всех запросов AJAX из WKWebView.

пример кода

NSString *XMLHTTPRequestHookJSPath = [[NSBundle mainBundle] pathForResource:@"XMLHTTPRequestHook.js" ofType:nil];
    NSString *kXMLHTTPRequestHookJS = [NSString stringWithContentsOfFile:XMLHTTPRequestHookJSPath encoding:NSUTF8StringEncoding error:NULL];
    WKUserContentController *contentController = [[WKUserContentController alloc] init];
    WKUserScript *script = [[WKUserScript alloc] initWithSource:kXMLHTTPRequestHookJS injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:NO];
    [contentController addUserScript:script];
    WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
    configuration.userContentController = contentController;

    self.lastUsedWebView = [[WKWebView alloc] initWithFrame:self.webContainerView.bounds configuration:configuration];
    self.lastUsedWebView.navigationDelegate = self;

И в файле XMLHTTPRequestHook.js попробуйте связать XMLHttpRequest с вашей пользовательской реализацией, чтобы добавить этот настраиваемый заголовок и вызвать исходный открытый метод.

Случай 2 Если вы хотите, чтобы этот заголовок добавлялся при загрузке URLRequest в WKWebview, вы можете добавить этот заголовок в NSMutableRequest, как показано ниже, и загрузить этот запрос в WKWebview. Однако с помощью этого метода у вас может не быть этого заголовка во всех вызовах AJAX из WKWebview.

пример кода:

WKWebView * webView = /*set up your webView*/
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com/index.html"]];
[request addValue:@"app://myApp" forHTTPHeaderField:@"Access-Control-Allow-Origin"];
// use stringWithFormat: in the above line to inject your values programmatically
[webView loadRequest:request];

Надеюсь, что это поможет.