diff --git a/apk-webview/app/src/main/java/ru/ua1zbe/bus127/Webs.java b/apk-webview/app/src/main/java/ru/ua1zbe/bus127/Webs.java index 17b98dd..d1be5a6 100644 --- a/apk-webview/app/src/main/java/ru/ua1zbe/bus127/Webs.java +++ b/apk-webview/app/src/main/java/ru/ua1zbe/bus127/Webs.java @@ -1,6 +1,9 @@ package ru.ua1zbe.bus127; import android.app.Activity; +import android.util.Log; +import android.webkit.ConsoleMessage; +import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -10,6 +13,8 @@ final class Webs { /** Главный экран: полное расписание раскрывается прямо на странице. */ static final String URL_MAIN = "file:///android_asset/index.html#app"; + /** Карта маршрута с положением автобуса. */ + static final String URL_MAP = "file:///android_asset/index.html#map"; /** Описание приложения и версия. */ static final String URL_ABOUT = "file:///android_asset/index.html#about"; @@ -22,7 +27,25 @@ final class Webs { settings.setJavaScriptEnabled(true); settings.setDomStorageEnabled(true); settings.setSupportZoom(false); + // Страница лежит в assets и грузится по file://, а карта (#map) тянет + // стиль, тайлы и шрифты VK Карт с https. Без этого file://-страница + // не может обращаться к внешним адресам, и карта остаётся пустой. + settings.setAllowUniversalAccessFromFileURLs(true); webView.setWebViewClient(new WebViewClient()); + webView.setWebChromeClient(new WebChromeClient() { + // страница — это весь интерфейс, поэтому её ошибки и предупреждения + // полезно видеть в logcat: иначе сбой на экране выглядит как «ничего не работает» + @Override + public boolean onConsoleMessage(ConsoleMessage m) { + if (m.messageLevel() == ConsoleMessage.MessageLevel.ERROR + || m.messageLevel() == ConsoleMessage.MessageLevel.WARNING) { + Log.w("Bus127JS", m.messageLevel() + " " + m.message() + + " (" + m.sourceId() + ":" + m.lineNumber() + ")"); + return true; + } + return false; + } + }); webView.addJavascriptInterface(new BusBridge(activity), "Bus"); webView.loadUrl(url); return webView;