Android webview auto search

98 Views Asked by At

I have a Webview in Android and i want it search my keyword in google and click a website which is http://digikala.com/ and do some task on it.
I tried following in kotlin:

findViewById<WebView>(R.id.web).settings.javaScriptEnabled = true
findViewById<WebView>(R.id.web).settings.loadsImagesAutomatically = true
findViewById<WebView>(R.id.web).settings.pluginState = WebSettings.PluginState.ON
findViewById<WebView>(R.id.web).webViewClient = MyBrowser()
findViewById<WebView>(R.id.web).loadUrl("https://www.google.com/search?q=$mykey")
btn.setOnClickListener{
btnPressed()
}

Also btnPressed()

fun btnPressed() {
    findViewById<WebView>(R.id.web).loadUrl(
        "javascript:(function(){" +
                "l=document.getElementsByClassName('yuRUbf');" +
                "e=document.createEvent('HTMLEvents');" +
                "e.initEvent('click',true,true);" +
                "l.dispatchEvent(e);" +
                "})()"
    );

}

The result is nothing happen. No Error and No Click!

1

There are 1 best solutions below

0
Raj Shah On

Please try this snippet

package com.search.demo;  


 import java.lang.reflect.Method;  

 import android.app.Activity;  
 import android.os.Bundle;  
 import android.view.KeyEvent;  
 import android.view.Menu;  
 import android.view.MenuItem;  
 import android.view.View;  
 import android.view.View.OnClickListener;  
 import android.view.View.OnKeyListener;  
 import android.webkit.WebView;  
 import android.widget.Button;  
 import android.widget.EditText;  
 import android.widget.LinearLayout;  

 public class SearchActivity extends Activity {  
      WebView mWebView;  
      private LinearLayout container;  
      private Button nextButton, closeButton;  
     private EditText findBox;  

    /** Called when the activity is first created. */  

   @Override  
   public void onCreate(Bundle savedInstanceState) {  
       super.onCreate(savedInstanceState);  
       setContentView(R.layout.main);  
       mWebView = (WebView)findViewById(R.id.webview);  
       mWebView.loadUrl("http://devemat-androidprogramming.blogspot.com/");  
   }  

   private static final int SEARCH_MENU_ID = Menu.FIRST;  

   @Override  
   public boolean onCreateOptionsMenu(Menu menu){  
       super.onCreateOptionsMenu(menu);  

       menu.add(0, SEARCH_MENU_ID, 0, "Search");  
       return true;  
   }  

   public boolean onPrepareOptionsMenu(Menu menu){  
       super.onPrepareOptionsMenu(menu);  
       return true;  
   }  

   public boolean onOptionsItemSelected(MenuItem item){  
       switch(item.getItemId()){  
           case SEARCH_MENU_ID:  
               search();  
           return true;  
       }  
       return true;  
   }  

   public void search() {
    container = (LinearLayout) findViewById(R.id.layoutId);

    nextButton = new Button(this);
    nextButton.setText("Next");
    nextButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            mWebView.findNext(true);
        }
    });

    container.addView(nextButton);

    closeButton = new Button(this);
    closeButton.setText("Close");
    closeButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            container.removeAllViews();

        }
    });
    container.addView(closeButton);

    findBox = new EditText(this);
    findBox.setMinEms(30);
    findBox.setSingleLine(true);
    findBox.setHint("Search");

    findBox.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if ((event.getAction() == KeyEvent.ACTION_DOWN) && ((keyCode == KeyEvent.KEYCODE_ENTER))) {
                mWebView.findAll(findBox.getText().toString());

                try {
                    Method m = WebView.class.getMethod("setFindIsUp", Boolean.TYPE);
                    m.invoke(mWebView, true);
                } catch (Exception ignored) {
                }
            }
            return false;
        }
    });

    container.addView(findBox);
    }
}