【问题标题】:Android WebView JavaScript from assets来自资产的 Android WebView JavaScript
【发布时间】:2012-03-13 22:23:19
【问题描述】:

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

【问题讨论】:

    标签: javascript android local assets


    【解决方案1】:

    回答:
    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 文件保存在项目的“assets”文件夹下的某个位置。例如:

    /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 和其他本地资源,然后加载远程内容。

    【讨论】:

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

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

    【讨论】:

    • 能否请您详细告诉我如何在将html作为字符串后动态添加(file://)路径到.js。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2018-07-04
    • 1970-01-01
    • 2012-08-22
    • 2012-06-20
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多