WebView 检测按钮点击事件

4

我正在webview中加载一个网址。如下所示:

 mWebView                =       (WebView)findViewById(R.id.id__web_view);
 mWebView.getSettings().setJavaScriptEnabled(true);
 mWebView.setWebViewClient(new WebViewClient());
 mWebView.loadUrl("http://www.google.com");

我如何检测加载的页面中的按钮点击事件。例如,当用户在搜索完成后单击“图像”选项卡时,我想显示一个toast“已单击”。(请注意,检测按钮单击在我加载的页面的前一页)。

我尝试过什么:- 我对如何做到这一点进行了一些研究,但没有任何成果。 以下是其中之一:-

WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
wv.addJavascriptInterface(new Object()
{
  public void performClick()
  {
    // Deal with a click on the OK button
  }
}, "ok");

<button type="button" onclick="ok.performClick();">OK</button>

但是这需要在HTML中添加onclick,我不确定是否可以在第三方网站上这样做。如果有人有任何线索,请帮忙解决一下这个问题。

使用WebView.loadUrl注入JavaScript,该JavaScript将查找按钮并添加点击监听器。 - Selvin
1个回答

2
请查看以下代码,它对我来说运行良好。
@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {

    private WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView)findViewById(R.id.webView1);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setLoadsImagesAutomatically(true);
        mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        mWebView.setWebViewClient(new MyBrowser());
        mWebView.loadUrl("file:///android_asset/index.html");
    }


    private class myWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            view.addJavascriptInterface(new Object()
            {
                @JavascriptInterface
                public void performClick() throws Exception
                {
                    Log.d("LOGIN::", "Clicked");
                    Toast.makeText(MainActivity.this, "Login clicked", Toast.LENGTH_LONG).show();
                }
            }, "login");
            return true;
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接