我正在调用WebView
中的方法。只要点击Toast
中的按钮,该方法就会执行WebView
。它工作正常,但当我通过一个参数它不起作用。当我传递一个参数时,该方法没有被执行。
这是javascript
中的strings.xml
-
<string name="details">
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width; user-scalable=0;" />
<title>My HTML</title>
</head>
<body>
<h1>MyHTML</h1>
<p id="mytext">Hello!</p>
<input type="button" value="Say hello" onClick="showAndroidToast('Hello world!')" />
<script language="javascript">
function showAndroidToast(toast) {
AndroidFunction.showToast(toast);
}
function callFromActivity(msg){
document.getElementById("mytext").innerHTML = msg;
}
</script>
</body>
</html></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();
}
}
答案 0 :(得分:1)
您的Javascript语法不正确:
function showAndroidToast(String toast) {
AndroidFunction.showToast(String toast);
}
需要:
function showAndroidToast(toast) {
AndroidFunction.showToast(toast);
}
其他提示:
您正在使用getString()
包裹<html><body>
来复制HTML标记。这已包含在您的strings.xml
:
webview.loadDataWithBaseURL(null, getString(R.string.details), "text/html", "utf-8", null);
您不应将所有HTML存储在strings.xml
中。将其作为HTML文件存储在您的资源文件夹中,然后调用:
webview.loadUrl("file:///android_asset/details.html");
您不应该使用这样的侵入性Javascript,以后维护它将是一场噩梦。阅读this article以了解更好的vanilla Javascript开发方法。
答案 1 :(得分:1)
我们在方法调用中不使用变量类型。
更改
AndroidFunction.showToast(String toast);
到
AndroidFunction.showToast(toast);