来自资产的 Android WebView JavaScript

IT技术 javascript android local assets
2021-01-14 08:16:51

如何从资产文件夹(或任何本地资源)加载远程 HTML 页面上的 JavaScript 和图像?

2个回答

答:
1. 您必须将 HTML 加载到字符串中:

private String readHtml(String remoteUrl) {
    String out = "";
    BufferedReader in = null;
    try {
        URL url = new URL(remoteUrl);
        in = new BufferedReader(new InputStreamReader(url.openStream()));
        String str;
        while ((str = in.readLine()) != null) {
            out += str;
        }
    } catch (MalformedURLException e) { 
    } catch (IOException e) { 
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return out;
}


2. 使用基本 URL 加载 WebView:

String html = readHtml("http://mydomain.com/my.html");
mWebView.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "utf-8", "");

在这种特殊情况下,您应该将要在页面上使用的所有 .js 文件驻留在项目的“资产”文件夹下的某个位置。例如:

/MyProject/assets/jquery.min.js


3. 在您的远程 html 页面中,您必须加载驻留在您的应用程序中的 .js 和 .css 文件,例如:

<script src="file:///android_asset/jquery.min.js" type="text/javascript"></script>

这同样适用于所有其他本地资源,如图像等。它们的路径必须以

file:///android_asset/

WebView 将首先加载您以字符串形式提供的原始 HTML,然后选择 .js、.css 和其他本地资源,然后加载远程内容。

如果 html 已经远程且无法编辑程序应识别这些文件并替换字符串 html 中字符串
2021-03-15 08:16:51
这对我来说似乎适用于 4.1+,并且是迄今为止我能够使用未硬编码到资产文件夹中的 javascript 加载 HTML 的唯一方法。
2021-03-17 08:16:51
如果用 设置基本路径,为什么必须提供绝对路径loadDataWithBaseURL此外,这似乎在 4.1+ 中中断了。:(
2021-03-26 08:16:51
我们如何在 postURL 方法上实现这个
2021-04-06 08:16:51
在此解决方案中,如果网页包含图像,则不会加载任何图像。
2021-04-14 08:16:51

如果动态创建您的 HTML,然后使用 loadDataWithBaseURL,请确保您的资产文件夹中的任何本地资源(例如 javascript)在 HTML 中被称为 file:/// (我花了几个小时来解决这个问题)

你能详细告诉我如何在获取 html 作为字符串后动态添加 (file://) 路径到 .js。
2021-04-01 08:16:51