我想知道是否有任何方法可以从原生Android Activity调用JavaScript函数。
我遇到了:
webView.loadUrl("javascript:hello()");
但它对我不起作用。
此外,Android将如何知道此JavaScript函数驻留在哪个html页面中?
答案 0 :(得分:13)
如果当前在webView中加载了html页面,Android只能调用javascript方法
webView.loadUrl("javascript:hello()");
仅当包含此方法的页面当前在webview控件中加载时,才会在html页面中调用hello方法
先打电话
webview.loadUrl("Your html page url");
然后致电
webView.loadUrl("javascript:hello()");
答案 1 :(得分:10)
如果有人像我一样有任何问题,你需要在页面加载完成后调用你的javascript函数,否则不会调用javascript:
webviewer.loadUrl("file:///android_asset/mypage.html");
webviewer.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url)
{
webviewer.loadUrl("javascript:hello()");
}
});
答案 2 :(得分:3)
在使用JavaScript之前,首先必须使用“getJavaScriptEnabled()”检查应用程序中是否启用了Javascript(默认值为FALSE)。而loadUrl()方法仅用于加载当前页面。它没有做任何与JavaScript相关的事情。
实施例
设置WebView
// webview的初始化
webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
在WebView中加载HTML
webView.loadUrl("file:///android_asset/testhtml.html");
将WebChromeClient设置为webView
webView.setWebChromeClient(new MyJavaScriptChromeClient());
MyJavaScriptChromeClient类 在这里,我们必须重写onJsAlert()方法来处理JavaScript Alert Function。
private class MyJavaScriptChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message,final JsResult result) {
//handle Alert event, here we are showing AlertDialog
new AlertDialog.Builder(MainWebViewActivity.this)
.setTitle("JavaScript Alert !")
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do your stuff
result.confirm();
}
}).setCancelable(false).create().show();
return true;
}
}
我的Html文件: testhtml.html:
<html>
<body >
<div onclick="alert('hello')"> Click Me !! </div>
</body>
</html>
它是如何工作的? 当文字“点击我!!”单击WebView,调用android函数onJsAlert(WebView视图,String url,String消息,最终JsResult结果)。 alert的参数被复制到onJsAlert函数的message参数中。剩下的处理工作就在那里完成。 这里我们显示一个AlertDialog。