0

我正在从我的WebView. Toast每当单击 中的按钮时,该方法就会执行WebView。它工作正常,但是当我通过参数时它不起作用。当我传递一个参数时,该方法没有被执行。

这是我javascriptstrings.xml-

<string name="details">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width; user-scalable=0;&quot; /&gt;
&lt;title&gt;My HTML&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;MyHTML&lt;/h1&gt;
&lt;p id=&quot;mytext&quot;&gt;Hello!&lt;/p&gt;
&lt;input type=&quot;button&quot; value=&quot;Say hello&quot; onClick=&quot;showAndroidToast('Hello world!')&quot; /&gt;
&lt;script language=&quot;javascript&quot;&gt;
   function showAndroidToast(toast) {
       AndroidFunction.showToast(toast);
   }
   function callFromActivity(msg){
 document.getElementById(&quot;mytext&quot;).innerHTML = msg;
   }
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</string>

这是我的Activity's代码-

String str = "<html><body>"
            + getString(R.string.details)
            + "</body></html>";
    webview.addJavascriptInterface(new MyJavaScriptInterface(this),
            "AndroidFunction");

    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webview.loadDataWithBaseURL(null, str, "text/html", "utf-8", null);

这是我的MyJavaScriptInterface课:

public class MyJavaScriptInterface {
    Context mContext;

    MyJavaScriptInterface(Context c) {
        Log.d("tag", "cls");
        mContext = c;
    }

    public void showToast(String toast) {//without the argument this method executes
        Log.d("tag", "msg");
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }

}
4

2 回答 2

1

您的 Javascript 语法不正确:

function showAndroidToast(String toast) {
    AndroidFunction.showToast(String toast);
}

需要是:

function showAndroidToast(toast) {
    AndroidFunction.showToast(toast);
}

附加提示:

  1. 您正在通过getString()<html><body>. 这已经包含在您的strings.xml:

    webview.loadDataWithBaseURL(null, getString(R.string.details), "text/html", "utf-8", null);

  2. 您不应该将所有 HTML 存储在strings.xml. 将其作为 HTML 文件存储在您的资产文件夹中并调用:

    webview.loadUrl("file:///android_asset/details.html");

  3. 您不应该使用这样的侵入式 Javascript,以后维护将是一场噩梦。阅读本文以了解更好的原生 Javascript 开发方法。

于 2013-11-08T11:42:45.807 回答
1

我们不在方法调用中使用变量类型。

改变

AndroidFunction.showToast(String toast);

AndroidFunction.showToast(toast);
于 2013-11-08T11:45:48.863 回答