WKWebView javascript слушатель, мешающий навигации - PullRequest
0 голосов
/ 20 марта 2020

Я сталкиваюсь с действительно странной проблемой, когда регистрация для обратного вызова Javascript с помощью WKUserContentController, похоже, мешает навигации в веб-представлении. Что должно произойти, и что написано HTML, так это то, что после нажатия кнопки для отправки формы веб-представление должно отправить обратный вызов с информацией о форме, которую обрабатывает приложение, и в то же время веб-представление также перемещается к другой URL-адрес (в данном случае это глубокая ссылка приложения), установив для этого window.location этот URL-адрес.

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

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

    config.userContentController = [WKUserContentController new];
    [config.userContentController addScriptMessageHandler:self name:@"formSubmit"];
    [config.userContentController addScriptMessageHandler:self name:@"formError"];

    NSString *jsListener = [NSString stringWithFormat:@"javascript listener here";
    [config.userContentController addUserScript:[[WKUserScript alloc] initWithSource:jsListener injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]];

    WKWebView *webView = [[WKWebView alloc] initWithFrame:frame configuration:config];
...