简体   繁体   中英

Detect a click of the search button in google Android

I have a webview that display the google page and i want to do something when the search button in the google page is pressed is it possible ? here is my webview :

WebView wb=(WebView) findViewById(R.id.webView);
        wb.getSettings().setJavaScriptEnabled(true);
        wb.getSettings().setLoadsImagesAutomatically(true);
        wb.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);

        wb.loadUrl("https://www.google.com");

You can use WebViewClient to listen for url changes. It doesn't exactly allow to listen for that specific button, but you can just check the url, like so:

WebView wv = (WebView) findViewById(R.id.webView);
WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
WebViewClient wvc = new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        boolean isSearch = url.startsWith("https://www.google.com/search");
        if (isSearch) {
            Log.d("WebView", "search clicked");
            return true;
        }
        return false;
    }

};
wv.setWebViewClient(wvc);
wv.loadUrl("https://www.google.com");

I know this is late, but yes you can. You have to set up a JavaScript event listener as a url query to load on Android's side.

..
webView.addJavascriptInterface(new JSInterface(), "SearchClicked");
webView.setWebViewClient(new WebViewClient() {
     @Override
     public void onPageFinished(WebView view, String url) {
          String query = 
          "document.getElementsByClassName('BwoPOe').item(0).addEventListener('click', 
          function() {SearchClicked.doTasks()}, false);";
          webView.loadUrl("javascript:" + query);
     }
});

webView.loadUrl("https://images.google.com/");
..

Here when loading the WebView, you're getting the Google search button by getting a class name called BwoPOe , and setting it's event listener to call the JSInterface method doTasks .

You can find out the button class name using the Chrome's inspect element tool.

private class JSInterface {
     @JavascriptInterface
     public void boundMethod(String html) {
          // do something...
     }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM