Метод shouldOverrideUrlLoading не вызывается в случае SPA

При создании приложения для Android с помощью WebView возникла проблема.

Я хотел бы поместить одностраничное приложение, созданное с помощью react.js, в WebView и управлять им по изменяемому URL-адресу перед загрузкой страницы с помощью метода shoudOverrideUrlLoading(). Но shoudOverrideUrlLoading() никогда не вызывается.

Однако в случае не одностраничного приложения это просто работает.

Это проблема между WebView и SPA? Я догадывалась, что будет, но ссылок не было.

WebView.shouldOverrideUrlLoading() фактически вызывается при переходе по ссылкам, например, когда пользователь щелкает ссылку на странице для перехода к другой. Он не будет запускаться по тем JS-запросам, инициированным популярными JS-фреймворками, такими как Angular, Vue и т. д.
Wei WANG 07.01.2019 03:38
2
1
1 262
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

shouldOverrideUrlLoading() вызывается только для навигации рендерер инициирован. Это в основном означает:

  • Пользователь перешел по ссылке
  • JS на странице щелкнул ссылку или иным образом попытался перейти (например, window.location.href)
  • Перенаправление HTTP для другой навигации (некоторый HTTP-код 3xx)

Противоположностью навигации, инициированной средством визуализации, является навигация браузер инициирован. Сюда входят любые loadUrl() / loadData() / и т. д. метод - shouldOverrideUrlLoading() для них не вызывается.

Одностраничное приложение не выполняет навигацию, поэтому API не вызывается. Вместо этого вы можете исследовать решение с помощью addJavascriptInterface(), где щелчки пользователя будут запускать вызовы методов на внедренном JavascriptInterface (вместо прямого вызова AJAX).

Другие вопросы по теме