javascript - 从 android 调用 javascript 函数

标签 javascript android

我正在尝试从 java android 代码调用 javascript 函数。我试图查看之前与此相关的所有问题,但似乎没有任何效果。有什么建议吗?谢谢!

javascript code:
<html>
    <head>
        <script language="javascript">
            function doSomething() {
                alert('hey!!!!!!!');
            }
        </script>
    </head>
    <body>
        ilana
    </body>
</html>




java code (from an activity on create)

 final WebView webview=(WebView)findViewById(R.id.myWebView);
 webview.getSettings().setJavaScriptEnabled(true);
 webview.addJavascriptInterface(new JavaScriptInterface(this), "Android");
 webview.loadUrl("file:///android_asset/www/index.html");
 webview.setWebChromeClient(new WebChromeClient());
 webview.loadUrl("javascript:doSomething()");

我更新的(但仍然不起作用)代码是: JavaScript:

<html>
<head>
<script type="text/javascript">
    function doSomething(){
        alert("hello");
    }
</script>

</head>
<body>
hello hello hello!
</body>
</html>

java:
    final WebView webview=(WebView)findViewById(R.id.myWebView);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.loadUrl("file:///android_asset/www/index.html");
    webview.setWebChromeClient(new WebChromeClient());
    webview.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageFinished(WebView view, String url) {
         super.onPageFinished(view, url);
     view.loadUrl("javascript:doSomething()");
     }

    });

最佳答案

我认为您必须等待加载页面结束

尝试一下

webview.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            view.loadUrl("javascript:doSomething()");
        }
    });

Main 在哪里。您的 Activity 的此更改

webview.setWebChromeClient(new WebChromeClient(){
        @Override
        public boolean onJsAlert(WebView view, String url, String message, final JsResult result){
            new AlertDialog.Builder(Main.this)
            .setTitle("Alert")
            .setMessage(message)
            .setPositiveButton("OK",
                    new AlertDialog.OnClickListener() 
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which) 
                        {
                            result.confirm();
                        }
                    })
            .setCancelable(false)
            .create()
            .show();
            return true;
        }
    });

@评论@

我的onCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    WebView webview  = (WebView)findViewById(R.id.webView1);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            Log.d("", "!!!! here 1 !!!!");
            view.loadUrl("javascript:doSomething()");
        }
    });
    webview.setWebChromeClient(new WebChromeClient(){
        @Override
        public boolean onJsAlert(WebView view, String url, String message, final JsResult result){
            Log.d("", "!!!! here 2 !!!!");
            new AlertDialog.Builder(Main.this)
            .setTitle("Alert")
            .setMessage(message)
            .setPositiveButton("OK",
                    new AlertDialog.OnClickListener() 
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which) 
                        {
                            result.confirm();
                        }
                    })
            .setCancelable(false)
            .create()
            .show();
            return true;
        }
    });
    webview.loadUrl("file:///android_asset/index.html");

关于javascript - 从 android 调用 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17175457/

相关文章:

java - Android 的 fbconnect api 问题

java - 是否可以扩展其他类并实现 RealmModel?

android - 使用持续执行的 TimerTask 优化服务运行

android - 在服务中运行 Android TTS

javascript - 让 mydesign 填充 asp.net 页面

javascript - 为什么实例方法不能按预期工作?

javascript - 通过doc内的2个参数查询集合

android - 删除构建中不必要的 Android 权限

javascript - 选项标签内的重定向到另一个页面按钮始终重定向到同一页面(JavaScript)

javascript - 无法让 jquery 处理 php 文件