0

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

    });
1

2 Answers 2

2

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");
Sign up to request clarification or add additional context in comments.

4 Comments

should this be instead or in addition to webview.setWebChromeClient(new WebChromeClient());
i added this but still nothing.
try to change the WebChromeClient too.
i think the order is the problem now see my oncreate
0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.