2012-02-16 94 views
9

我在我的android应用程序中有一个webview,并希望检测到de url更改时。Android检测webview URL更改

我想用这个来隐藏顶部栏中的info按钮,当用户在info.php页面上时,当他不在info.php页面上时再次显示它。

我使用Google搜索,但找不到任何工作代码,任何人都可以帮我吗?

Thx提前!

+1

也许这会帮助你http://stackoverflow.com/questions/6868599/unable-to-get-currnet-url-on-click-event-of-web-view-in-android ..得到当前使用onPageStarted的页面的网址,你应该设置。 – 2012-02-16 13:56:55

+0

Thx,很棒! – Daniel 2012-02-16 14:22:05

+0

亲切接受/ up注册回答如果你有你的 – 2012-07-02 07:57:57

回答

8

您可以使用WebViewClient.shouldOverrideUrlLoading侦测到您的WebViewClient每个URL变化

+8

它不能检测到URL改变的JavaScript不会导致网页重新加载。 – 2013-06-13 17:21:33

+0

@HelinWang有没有其他检测方法 – 2013-10-10 12:49:37

+0

@HelinWang,你有没有检测到JavaScript重定向的代码? – 2017-08-02 04:52:09

0

尝试使用onLoadResource。即使您使用 JS来更改您的网址,它也会至少被调用一次。但它可能被称为不止一次,所以要小心。

1

我有一个有趣的问题,带给我这个问题,并乐意提供一个解决方案,可以帮助别人,如果他们来这样做,由于谷歌雅虎搜索。

mwebVew.reload()不会从我首先登录用户或注销用户的首选项屏幕返回时加载的新URL。它将更新共享首选项,但不更新并替换url网页。因此,在几个小时没有看到答案后,我尝试了以下方法,并且它的工作非常棒。

mWebView.resumeTimers(); 

在这里,如果你想了解更多的信息是link to the doco

希望它救了别人我经历过的痛苦,并高兴地有人告诉我,我应该以另一种方式实施它。

10

对于那些通过javascript加载网址。有一种方法可以通过JavascriptInterface检测URL更改。这里我使用youtube作为例子。使用JavaScriptInteface有异步问题,幸运的是它只是一个回调,所以这将是一个问题。注意@javascriptinterface注释必须存在。

{ 
    youtubeView.getSettings().setJavaScriptEnabled(true); 
    youtubeView.setWebViewClient(mWebViewClient); 
    youtubeView.addJavascriptInterface(new MyJavaScriptInterface(), 
      "android"); 
    youtubeView.loadUrl("http://www.youtube.com"); 

} 

WebViewClient mWebViewClient = new WebViewClient() { 
    @Override 
    public void onPageFinished(WebView view, String url) { 
     view.loadUrl("javascript:window.android.onUrlChange(window.location.href);"); 
    }; 
}; 

class MyJavaScriptInterface { 
    @JavascriptInterface 
    public void onUrlChange(String url) { 
     Log.d("hydrated", "onUrlChange" + url); 
    } 
} 
+0

为什么在使用MyJavaScriptInterface时可以直接在onPageFinished中工作? – 2017-07-07 10:08:15

+1

javascript:window.android.onUrlChange(window.location.href);是JavaScript语言在webview中的作品。 JavascriptInterface实际上打印的是网址。由于webview通过JavaScript加载网址,onPageFinished仍然传递原始网址,但实际上您已经输入了新的网址。 – 2017-07-07 13:39:09

+0

@Shu Zhang,不工作,我的网页有一个使用JavaScript重定向但不工作。请帮忙。 – 2017-08-02 03:33:19

4

如果重写WebViewClient的这种方法,你将能够处理的URL变化,JavaScript网址的变化:

public class YXWebViewClient extends WebViewClient { 

@Override 
public void onPageStarted(WebView view, String url, Bitmap favicon) { 
    super.onPageStarted(view, url, favicon); 
    Log.i("Listener", "Start"); 

} 

@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
    Log.i("Listener", "Finish"); 
    } 

} 

,然后在网页视图设置WebViewClient

yxWebViewClient = new YXWebViewClient(); 
webview.setWebViewClient(yxWebViewClient); 
-1

这将有助于检测由JavaScript引起的重定向。

WebViewClient mWebViewClient = new WebViewClient() { 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      view.loadUrl("javascript:window.android.onUrlChange(window.location.href);");   } 
    }; 
    myWebView.setWebViewClient(mWebViewClient); 
    } 
@JavascriptInterface 
public void onUrlChange(String url) { 
    Toast.makeText(mContext, "Url redirected",Toast.LENGTH_SHORT).show(); 
} 
0

onPageFinished方法似乎至少在现代WebViews中工作。