【问题标题】:Android: Unable to load simple html data having javascript file in WebView?Android:无法在 WebView 中加载具有 javascript 文件的简单 html 数据?
【发布时间】:2012-11-29 20:15:44
【问题描述】:
WebView web_view = (WebView) findViewById(R.id.webView1);
        web_view.getSettings().setJavaScriptEnabled(true);
        web_view.getSettings().setPluginsEnabled(true);
        web_view.getSettings().setAllowFileAccess(true);

        String data;
        data = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
                + "<html>"
                + "<head>"
                + "<title>My First chart using FusionCharts XT</title>"
                + "<script type=\"text/javascript\" src=\"FusionCharts.js\">"
                + "</script>"
                + "</head>"
                + "<body>"
                + "<div id=\"chartContainer\">FusionCharts XT will load here!</div>"
                + "<script type=\"text/javascript\">"
                + "FusionCharts.setCurrentRenderer(\"javascript\");"
                + "var myChart = new FusionCharts(\"FusionCharts/Line.swf\", \"myChartId\", \"400\", \"300\", \"0\", \"1\" );"
                + "var dataString =\"<chart> <set label='0.00' value='0'/><set label='5.00' value='2' /><set label='7.00' value='3' /><set label='9.00' value='4' /><set label='12.00' value='2' /></chart>\"; "
                + "myChart.setXMLData(dataString);"
                + "myChart.render(\"chartContainer\");" + "</script>"
                + "</body>" + "</html>";

        Log.i("info", "Html " + data);

        web_view.loadData(data, "text/html; charset=UTF-8",null);

在我的项目中,我正在使用融合图表。我正在制作一个 html 字符串数据并将其加载到 WebView 中,如上面的代码示例所示。当我在浏览器中运行此 html 文件时,它会运行并制作 Fusion 图表,但是当我使用 android Web 视图执行此操作时,它不会加载到我的 Web 视图中。 我已经启用了 javascript。 我将 javascript 文件粘贴到 assets 文件夹中。

【问题讨论】:

    标签: android html-parsing android-webview android-loader


    【解决方案1】:

    首先,你提到的浏览器是你设备上的浏览器还是电脑上的浏览器?

    现在,如果它在 android 浏览器(或您设备中的浏览器)中运行,那么问题在于 javascript 文件位于您的资产文件夹中。当您通过相对路径(您使用的方式)指示资源时,webview 会相对于与您的 html 文件所在的文件夹相同的文件夹来搜索它。由于您使用字符串作为“html 文件”,因此我建议您使用loadDataWithBaseURL()。下面我做了一个使用示例,使用 assets 文件夹作为基本 URL,试试吧。

    web_view.loadDataWithBaseURL("file:///android_asset/", data, "text/html", "UTF-8",null);
    

    public void loadDataWithBaseURL(字符串baseUrl,字符串数据,字符串mimeType,字符串编码,字符串historyUrl)

    在 API 级别 1 中添加 将给定数据加载到此 WebView 中,使用 baseUrl 作为内容的基本 URL。基本 URL 既用于解析相对 URL,也用于应用 JavaScript 的同源策略。 historyUrl 用于历史记录。

    请注意,只有当 baseUrl 指定除“http”、“https”、“ftp”、“ftps”、“about”之外的方案时,以这种方式指定的内容才能访问本地设备文件(通过“文件”方案 URL)或“javascript”。

    如果base URL使用data scheme,这个方法相当于调用loadData(),historyUrl被忽略。

    参数 baseUrl 用作页面基本 URL 的 URL。如果 null 默认为“关于:空白”。 data 给定编码的数据字符串 mimeType 数据的 MIMEType,例如'文本/html'。如果为 null,则默认为“文本/html”。 encoding 数据的编码 historyUrl 用作历史条目的 URL。如果 null 默认为 'about:blank'。

    你可以尝试将 assets 文件夹作为 baseUrl 传递,所以我猜你的代码应该是这样的

    希望这会有所帮助!

    【讨论】:

    • 完美工作
    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2014-01-19
    相关资源
    最近更新 更多