【问题标题】:How do I "listen" for something in WebView, Android?如何在 Android 的 WebView 中“监听”某些内容?
【发布时间】: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 浏览网页时,我想听这些东西,然后在它发生时调用一个函数。

【问题讨论】:

    标签: java android uiwebview 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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-06
          • 1970-01-01
          • 2017-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-02
          • 1970-01-01
          相关资源
          最近更新 更多