使用WebView.Load()通过引用JS库来读取动态HTML?

时间:2012-03-21 23:37:43

标签: java javascript android webview

我正在尝试编写一个类,它将返回一个带有Javascript的HTML字符串,以便在WebView中使用。返回HTML和Javascript运行良好,但我在使用返回的HTML加载库时遇到问题。例如,这很有效:

public static String helloWorld() {
    String html;
    html =  "<!DOCTYPE html>" +
            "<html>" +
            "<head>" +
            "<title>" +
            "</title>" +
            "</head>" +
            "<body>" +
            "<script>" +
            "document.write(\"Hello, World\");" +
            "</script>" +
            "</body>" +
            "</html>";
    return html;
}

然而,这不是:

public static String helloWorld() {
    String html;
    html =  "<!DOCTYPE html>" +
            "<html>" +
            "<head>" +
            "<title>" +
            "</title>" +
            "<script src=\"../assets/src/external_script.js\"></script>" +
            "</head>" +
            "<body>" +
            "<script>" +
            "external_script_function();" +
            "</script>" +
            "</body>" +
            "</html>";
    return html;
}

我猜测external_script.js导入的文件路径不正确?使用WebView.LoadUrl(myLocalHtmlFile);时使用其他JS文件。我该怎么做才能正常工作?或者,是否有更好的方法来获得类似的结果?

2 个答案:

答案 0 :(得分:1)

您需要将assets文件夹作为基本URL提供给WebView。像这样:

MyWebView.loadDataWithBaseURL("file:///android_asset/", helloWorld());

然后<script>标记会像这样:

<script src="src/external_script.js"></script>

假设图书馆位于assets/src下。是的,你需要启用像triad建议的JavaScript。

答案 1 :(得分:0)

由于您编写资产,我认为您正在尝试加载放在Eclipse中的文件或您使用的与您的应用程序捆绑在一起的IDE。这会存储在您的APK和AFAIK中,但不会“解压缩”到您应用的工作目录中。

这意味着你必须手动将它放在SD卡或内部存储器上,或者在内部加载它并在将它发送到WebView之前将其动态注入最终的HTML中。

就个人而言,我会选择第二种方法,因为它确实可以减少混乱。