Как манипулировать iFrames в WKWebView? - PullRequest
0 голосов
/ 01 октября 2019

Я хочу добавить пользовательские заголовки в NSURLRequests, созданный для фреймов верхнего уровня WKWebView и всех его фреймов.
Чтобы добиться этого, я слушаю метод
- webView:decidePolicyForNavigationAction:decisionHandler:. В этом методе я хочу отменить существующую загрузку страницы и создать новую NSURLRequest и перезагрузить страницу.

Вот фрагмент кода, который я использую,

 - (void)webView:(WKWebView*)webView
    decidePolicyForNavigationAction:(WKNavigationAction*)action
                    decisionHandler:
                        (void (^)(WKNavigationActionPolicy))decisionHandler {


  NSString* header = @"Custom-Header";
    if([action.request.allHTTPHeaderFields objectForKey:header] ){
        NSLog(@"Header already added for URL - %@",action.request.URL.absoluteString );
    }
    else{
        decisionHandler(WKNavigationActionPolicyCancel);
        NSLog(@"Adding header for URL %@",action.request.URL.absoluteString);
        NSMutableURLRequest *mutableRequest = [action.request mutableCopy];
        NSString* headerVal;
        if(action.targetFrame.mainFrame)
        {
            headerVal = @"MAINFRAME";
        }
        else
        {
            headerVal = @"SUBFRAME";
        }

        [mutableRequest addValue:headerVal forHTTPHeaderField:header];

        [action.targetFrame.webView loadRequest:mutableRequest];
        return;
    }

    // further processing
}

Однако при таком подходе я сталкиваюсь со следующей проблемой: если обратный вызов получен для iFrame, вся страница перезагружается с URL-адресом iFrame,Вместо этого я хочу перезагрузить только iFrame с URL. Есть ли способ решить эту проблему?

Обратите внимание , что в конце этого я хочу иметь возможность отправлять пользовательский заголовок, указывающий, был ли запрос получен из основного кадра или из iFrame. Пожалуйста, предложите, если есть лучшие решения для достижения этой цели.

...