如何在Android WebView HTML页面中使用外部Javascript文件?

时间:2017-12-02 19:15:19

标签: javascript android webview

我正在尝试将一个html页面作为WebView启动,并附带一些附加的Javascript。我希望脚本在提交html表单时执行。

相关代码如下。我将html数据存储为字符串,以便将其传递给loadDataWithBaseUrl。我给出的baseurl是资产文件夹,由Android Studio(app - > assets)创建。 javascript.js是该目录的直接子项。

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    WebView webview = new WebView(this);
    webview.getSettings().setJavaScriptEnabled(true);

    String htmlString =

                    "<html>\n" +
                    "<head>\n" +
                    "    <script src=\"file:///android_asset/javascript.js/\" " +
                    "type=\"text/javascript\"></script>\n" +
                    "</head>\n" +
                    "\n" +
                    "<body>\n" +
                    "<form id=\"form\" onsubmit=\"tokenize(form)\">\n" +
                    "    <div>\n" +
                    "        <label>First Name</label>\n" +
                    "        <input type=\"text\" first-
                             name=\"first_name\">\n" +
                   ....
                   ....
                    "\n" +
                    "    <div id=\"tokenize\">\n" +
                    "        <button type=\"submit\">Tokenize!</button>\n" +
                    "    </div>\n" +
                    "</form>\n" +
                    "<script>\n" +
                    "function tokenize(form_id) {\n" +
                    ....
                    "           }</script>\n" +
                    "</body>\n" +
                    "</html>\n";

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

    setContentView(webview);

我希望&#34;脚本src = ...&#34;在我的html中加载javascript文件,以便我可以访问它的功能。

然而,当我在Android模拟器中运行该程序时,logcat会出现错误&#34;无法打开资产URL:file:///android_asset/javascript.js/"。当然,尝试提交html表单会导致应用程序崩溃。

我在这里做错了什么?我无法弄清楚为什么它无法加载javascript文件。我已经谷歌搜索和刮刮堆栈流几个小时,我看到一些类似的问题,但没有解决方案似乎适用于这里。非常感谢任何帮助。

0 个答案:

没有答案