如何在 Android 的 WebView 中“监听”某些内容?

Posted

技术标签:

【中文标题】如何在 Android 的 WebView 中“监听”某些内容?【英文标题】:How do I "listen" for something in WebView, Android? 【发布时间】:2011-01-14 05:49:03 【问题描述】:
private class HelloWebViewClient extends WebViewClient 
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) 
            view.loadUrl(url);
            return true;
           

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        webview = (WebView) findViewById(R.id.webview);
        webview.setWebViewClient(new HelloWebViewClient());
        webview.getSettings().setjavascriptEnabled(true);
        webview.loadUrl("http://mydomain.com");
    

这是一个非常简单的 webview 演示(我是按照教程编写的)。当用户加载我的应用程序时,这个 webview 会弹出,他可以在里面上网。

我如何“收听”事件?

当 URL 包含“google.com”时 或者,当 html 包含单词“google”时

当用户使用我的 webview 浏览网页时,我想听这些东西,然后在它发生时调用一个函数。

【问题讨论】:

【参考方案1】:

shouldOverrideUrlLoading 的文档让我读了几遍才明白。

如果你想让当前的 WebView 处理 url 则不需要调用 WebView.loadUrl,返回 false 即可。如果您希望您的应用对特定 URL 执行完全不同的操作,那么请执行您需要的操作并返回 true。

我希望所有不是来自我的主机的 URL 都由手机的浏览器应用程序而不是我的 WebView 处理。这是我的实现:

 @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) 
    boolean returnVal = false;
    if(url.startsWith(mUrlHost)) 
      //current Webview handles the URL
     else 
      Toast.makeText(mActivity, "Launching Browser", Toast.LENGTH_SHORT).show();
      Uri uri = Uri.parse(url);
      Intent intent = new Intent(Intent.ACTION_VIEW, uri);
      mActivity.startActivity(intent);
      returnVal = true;
    
    return returnVal;
  

【讨论】:

【参考方案2】:

有一种视图方法似乎是不错的候选者。你真的应该看看here 类的文档。

public void onLoadResource (WebView view, String url)

应该让您在页面加载之前检查 url。

public void onPageFinished (WebView view, String url)

应该让你搜索实际完成的加载内容。

【讨论】:

【参考方案3】:

要监听 google.com 请求,您应该像代码示例中那样覆盖 shouldOverrideUrlLoading,但您需要为这些请求提供替代操作,如下面的代码 sn-p 所示。

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) 
    if (url.contains("google.com")) 
        // Here you can do whatever you want
        view.loadUrl("http://example.com/");
        return true;
    

    // The default action, open the URL in the same WebView
    view.loadUrl(url);
    return true;

【讨论】:

以上是关于如何在 Android 的 WebView 中“监听”某些内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 的 WebView 中显示 PDF?

如何在android中检测来自WebView的通知?

Android - 如何在 WebView 中访问本地存储值?

如何在android的webview中调试javascript

android webview如何获取网页输出的提示信息

如何在android的webview中启用前置摄像头