У меня есть приложение, которое использует пользовательские схемы в Android WebViewClient shouldInterceptRequest(WebView view, String url)
и shouldOverrideUrlLoading(WebView view, String url)
для перехвата запросов в веб-приложении и использования собственной библиотеки для извлечения ресурсов из других источников в shouldInterceptRequest
. Это отлично работает до Android 4.4 KitKat, где Google внес некоторые важные изменения в компонент webView.shouldInterceptRequest на Android 4.4 KitKat
http://developer.android.com/guide/webapps/migrating.html#URLs
Теперь URL получил в shouldOverrideUrlLoading
вдруг становится недействительным, глядя, как это; заказ схема: ////my.pathname.com/. Сначала я подозревал, что дополнительные косые черты были вызваны тем, что Android не думал, что URL-адрес был действительным RFC3986, но в серии извлечения ресурсов (css, js, images) URL-адрес начинается правильно и внезапно переходит в неверный формат. WebView в Android 4.3 правильно сохранил URL-адрес в качестве настраиваемой схемы: //my.pathname.com/. Похоже, что базовый url внезапно меняется на '/' вместо 'my.pathname.com'.
Затем мое внимание изменилось к тому, что WebView 4.4 Руководства по миграции говорит о:
Если вы вызываете методы WebView из любого другого потока, чем поток пользовательского интерфейса вашего приложения, это может привести к неожиданным результатам. http://developer.android.com/guide/webapps/migrating.html#Threads
Это также может быть то, что я испытываю, но я до сих пор не придумали решение, где я могу использовать runOnUiThread()
для извлечения данных с нативным API и вернуть его в WebView внутри shouldInterceptRequest
. Кто-нибудь испытал что-то подобное?
Вот упрощенная версия моего shouldInterceptRequest
кода:
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
if (urlStartsWithKnownPrefix(url)) {
UrlFetchResult fetchRes = api.fetchUrl(url);
String charset = "utf-8";
String mime = fetchRes.getMimetype();
WebResourceResponse res = new WebResourceResponse(mime, charset, new ByteArrayInputStream(fetchRes.getResult()));
return res;
}
return null;
}
Как вы ссылаетесь на содержимое своего HTML? Какова ожидаемая и фактическая ценность URL-адреса, который вы получаете? – ksasq
Ресурсы ссылаются относительно, например; '', и они действительно отображаются и отображаются правильно, но когда я смотрю на DOM, базовый url - это настраиваемая схема: ////my.pathname.com/, который недействителен. Ожидаемый URL - это обычная схема: //my.pathname.com/, которая действительна. – MartinR
Как установить базовый URL-адрес и пользовательскую схему? – ksasq