Я сталкиваюсь с действительно странной проблемой, когда регистрация для обратного вызова 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];