【问题标题】:Unable to get current URL on click event of WebView in Android无法在 Android 中获取 WebView 的点击事件的当前 URL
【发布时间】:2011-07-29 04:18:40
【问题描述】:
    private WebView wv;
    public void onCreate(Bundle icicle) {
      super.onCreate(icicle);
      setContentView(R.layout.infoweblinkview);

    wv=(WebView) findViewById(R.id.weblinkview);
    wv.setWebViewClient(new WebViewClient());
    wv.getSettings().setJavaScriptEnabled(true);
    wv.loadUrl(getString(R.string.infourl));


 wv.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    String  previousUrl = wv.getUrl();
                }
            });

}

【问题讨论】:

    标签: android android-webview


    【解决方案1】:

    为此,您可以覆盖 WebViewClient 类中的某些方法

    @Override
            public void onPageFinished(WebView view, String url) {
                // TODO Auto-generated method stub
                super.onPageFinished(view, url);
            }
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub
                return super.shouldOverrideUrlLoading(view, url);
            }
    
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                // TODO Auto-generated method stub
                super.onPageStarted(view, url, favicon);
            }
    

    根据您的要求使用此方法中的任何一种,String url 为您提供网址

    【讨论】:

    • 如果出现类似Url“xxxxx/dasboard”,点击按钮变为“xxxxx/feedback”的情况,以上方法均收不到回调。如何处理?
    • boolean shouldOverrideUrlLoading(WebView view, String url) 现在已弃用,我得到的 url 是“re-state://”,你能帮忙吗?谢谢
    【解决方案2】:

    shouldOverrideUrlLoading() 方法只有在新的 URL 即将加载到当前 webview 时才会被调用。因此,要在单个网页应用程序内单击时接收更新的 URL,您需要扩展 WebChromeClient 类并将其实例设置为您的 webview。每当 URL 更新时,onProgressChanged 将被调用,您将在那里通过 webview 获得更新的 URL。

    webView?.webChromeClient = QuartzWebChromeClient() 
    

    QuartzWebChromeClient的onProgressChanged()里面更新的URL可以通过webview接收。

     private inner class QuartzWebChromeClient : WebChromeClient() {
        override fun onProgressChanged(view: WebView, newProgress: Int) {
            super.onProgressChanged(view, newProgress)
            Log.d("tag",view.url)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多