Webview для загрузки локального html файла, который содержит .js как <script src>

Я помещаю файл .html(который состоит из файла .js web link) в assest, теперь я пытаюсь загрузить url

mWebView = (WebView) findViewById(R.id.webview);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setPluginsEnabled(true);
        mWebView.getSettings().setAllowFileAccess(true);

        mWebView.loadUrl("file:///android_asset/anim1.html");

Здесь я не могу воспроизвести файл .js, ожидая положительного ответа.

Ответ 1

Прежде всего, я считаю маловероятным, что вы действительно хотите получать доступ к файлам HTML и JavaScript из активов, поскольку активы не могут (и не должны) обновляться после того, как приложение было упаковано и подписано. Это означает, что с вашими HTML и JavaScript в активах вы не можете их обновить. Подход к решению этой проблемы заключается в том, чтобы сохранить HTML и JavaScript во внутреннем или внешнем хранилище и использовать его оттуда.

Во-вторых, если вы используете этот подход, который я только что объяснил, вы больше не сможете использовать метод WebView.loadUrl(), но вместо этого вам нужно будет использовать метод WebView.loadDataWithBaseUrl(). Вот так:

webView.loadDataWithBaseURL("http://some_url/", "some_data", "text/html", "utf-8", null);

Затем "some_data" будет загружен как HTML-страница, как показано в предыдущем SO-ответе. Когда он пытается загрузить ресурс JavaScript, например /scripts/lib.js, он будет разрешен http://some_url/scripts/lib.js, и WebView попытается загрузить этот ресурс. Конечно, это невозможно, поэтому вам (в Java) необходимо расширить класс WebViewClient и предоставить реализацию для метода shouldInterceptRequest(WebView wv, String url).

Когда какой-либо ресурс пытается получить на веб-странице, будет вызываться'houldInterceptRequest ', а его возвращаемое значение будет использоваться как ресурс.