Мы хотим использовать Android WebView в качестве песочницы для выполнения локальных приложений HTML/JS. Основным требованием к безопасности является установка автономного режима WebView и разрешение только определенных интерфейсов javascript. Эти интерфейсы передаются во время выполнения javascript, используя метод WebView.addJavascriptInterface().Force Android WebView offline
Приложение Android имеет право доступа к сети (android.permission.INTERNET).
Я могу отключить обычные запросы http/https, , но полностью не удалось заблокировать запросы WebSocket. Кажется, что они обрабатываются разными обычными HTTP-запросами.
Один из вариантов заключается в том, чтобы перезаписать метод JavaScript WebSocket. Но это дает мне плохое чувство, поскольку это против концепции песочницы. Также представляется возможным использовать delete для восстановления исходного указателя функции.
Другой альтернативой было бы расслоение собственного настраиваемого WebView (например, Crosswalk-Project) с нашим приложением, но хотелось бы избежать этого, поскольку компиляция и обновления - это довольно много усилий.
Я попытался следующие интерфейсы общественных WebView, но ни один из них не кажется блокировать WebSocket вызовы:
- webSettings.setBlockNetworkLoads (истина);
- webSettings.setCacheMode (WebSettings.LOAD_CACHE_ONLY);
- webView.setNetworkAvailable (false);
- WebViewClient.shouldOverrideUrlLoading() (обратный вызов)
- WebViewClient.shouldInterceptRequest() (обратный вызов, пробовал обе версии)
- WebChromeClient.onPermissionRequest()
Проверено на Android 4.4.4 (19) и Android 5/5.1 (21/22).
Javascript Я выполнения:
ws = new WebSocket("wss://echo.websocket.org");
ws.onmessage = function(event) {
console.log("received: " + event.data);
};
ws.onclose = function() {
console.log("External Socket closed");
};
ws.onopen = function() {
console.log("Connected to external ws");
ws.send("Hello from " + navigator.userAgent);
};
Любые идеи, как это можно сделать?
Большое спасибо
Возможно, не ваш желаемый «запрос», но вы можете установить свою реализацию WebViewClient http://developer.android.com/reference/android/webkit/WebViewClient.html и заставить его быть в автономном режиме – eduyayo
@eduyayo Спасибо, но уже попробовал это (см. вопрос). Обратные вызовы WebViewClient вызываются только для «обычных» HTTP-запросов. Для WebSockets обратные вызовы не работают. –
для веб-сайтов ... есть только один запрос. Вы должны подключить поток – eduyayo