我想在我的Android应用程序上运行JavaScript函数,这就是我创建webview的方式:
m_FullJSWebView = new WebView(m_VideoView.getContext());
m_FullJSWebView.loadData(htmltmp, "text/html", "UTF-8");
m_FullJSWebView.getSettings().setJavaScriptEnabled(true);
m_FullJSWebView.addJavascriptInterface(new JavaScriptInterface(m_VideoView.getContext()), "MyAndroid");
m_FullJSWebView.loadUrl("javascript:getValue()");
这是html:
<html>
<head>
<script type="text/javascript">
function getValue(){
//return value to Android
var val= 50;
MyAndroid.receiveValueFromJs(val);
}
</script>
<title></title>
</head>
<body >
<form name="ipForm" id="ipForm">
UserName : <input type="text" name="userName">
<button type="button" onclick="getValue();">Submit</button>
</form>
</body>
</html>
这是JavascriptInterface
:
public class JavaScriptInterface {
Context mContext;
JavaScriptInterface(Context c) {
mContext = c;
}
//add other interface methods to be called from JavaScript
public void receiveValueFromJs(String str) {
//do something useful with str
Toast.makeText(mContext, "Received Value from JS: " + str,Toast.LENGTH_SHORT).show();
}
}
在我的设备上运行后,receiveValueFromJs
函数将不会被调用。任何想法是什么问题?
答案 0 :(得分:1)
来自doc:
请注意,在下次(重新)加载页面之前,注入的对象不会出现在JavaScript中。
这意味着您必须更改您的方法顺序:
m_FullJSWebView = new WebView(m_VideoView.getContext());
m_FullJSWebView.addJavascriptInterface(new JavaScriptInterface(m_VideoView.getContext()), "MyAndroid");
m_FullJSWebView.loadData(htmltmp, "text/html", "UTF-8");
m_FullJSWebView.getSettings().setJavaScriptEnabled(true);
m_FullJSWebView.loadUrl("javascript:getValue()");
name
中的addJavascriptInterface
参数是javascript中java对象的名称。它是从javascript调用方法的对象。
因此,您的电话应该是:
m_FullJSWebView.loadUrl("javascript:MyAndroid.getValue()");