@xotta6bl4

Как выполнить http запрос в JS в Android WebView?

В WebView загружаю локальную страницу из ассетов, содержащую следующий скрипт.

var request = new XMLHttpRequest();
//request.open("GET", "file:///data/data/package/files/TEMP", true);
request.open("GET", "https://epub-samples.googlecode.com/files/moby-dick-20120118.epub", true);

request.responseType = 'blob';
request.onload = function () {
console.log("Q!" + request.status);
var resp = request.response;
console.log(resp.size);
};
request.send();


На эмуляторе 4.4.4 работает. На реальных устройствах и эмуляторах API 16/17 не работает.
На некотороых устройствах
console.log(resp.size);

выдает 0, на других undefined.

Инициализация вебвью
super.getSettings().setJavaScriptEnabled(true);
        super.getSettings().setAllowContentAccess(true);
        super.getSettings().setAllowFileAccess(true);
        super.getSettings().setAllowFileAccessFromFileURLs(true);
        super.getSettings().setAllowContentAccess(true);
        super.getSettings().setAllowUniversalAccessFromFileURLs(true);
        super.setWebChromeClient(new WebChromeClient());
        super.loadUrl("file:///android_asset/html/mono.html");


Собственно, почему так и что делать?

ЗЫ. Может быть посоветуете epub библиотеку для андроида.
  • Вопрос задан
  • 3131 просмотр
Пригласить эксперта
Ответы на вопрос 2
VYakushev
@VYakushev
Разработчик Android в Nowtaxi
Оберните ваш JS-код в функцию. Загрузите его как и раньше. А потом функцию можно вызывать так:
super.loadUrl("javascript:foo(var1, var2.....");
Ответ написан
@xotta6bl4 Автор вопроса
Как показало гугление, начиная с Android 4.4 WebView использует обновлен и использует код Хромиума и имеет новый движек JS. https://developer.chrome.com/multidevice/webview/o...

Старый WebView, судя по всему, не умеет XMLHttpRequest.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы