При создании приложения для Android с помощью WebView возникла проблема.
Я хотел бы поместить одностраничное приложение, созданное с помощью react.js, в WebView и управлять им по изменяемому URL-адресу перед загрузкой страницы с помощью метода shoudOverrideUrlLoading(). Но shoudOverrideUrlLoading() никогда не вызывается.
Однако в случае не одностраничного приложения это просто работает.
Это проблема между WebView и SPA? Я догадывалась, что будет, но ссылок не было.
shouldOverrideUrlLoading() вызывается только для навигации рендерер инициирован. Это в основном означает:
window.location.href)Противоположностью навигации, инициированной средством визуализации, является навигация браузер инициирован. Сюда входят любые loadUrl() / loadData() / и т. д. метод - shouldOverrideUrlLoading() для них не вызывается.
Одностраничное приложение не выполняет навигацию, поэтому API не вызывается. Вместо этого вы можете исследовать решение с помощью addJavascriptInterface(), где щелчки пользователя будут запускать вызовы методов на внедренном JavascriptInterface (вместо прямого вызова AJAX).
WebView.shouldOverrideUrlLoading()фактически вызывается при переходе по ссылкам, например, когда пользователь щелкает ссылку на странице для перехода к другой. Он не будет запускаться по тем JS-запросам, инициированным популярными JS-фреймворками, такими как Angular, Vue и т. д.