Sivan Rypshtein
Sivan Rypshtein

Reputation: 9

calling a javascript function from android

I'm trying to call a javascript function from java android code. i tried to look at all previous questions concerning this but nothing seems to be working. are there any suggestions? thanks!

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()");

my updated (but still not working) code is: 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()");
     }

    });

Upvotes: 0

Views: 1291

Answers (2)

Icaro Martins
Icaro Martins

Reputation: 307

I think you have to wait the end of loading page

try that

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

where is Main.this change for your activity this

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;
        }
    });

@ comments @

my 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");

Upvotes: 2

Levi
Levi

Reputation: 1732

You have used language="javascript", the correct attribute is type="text/javascript"

Upvotes: 0

Related Questions