我的网络视图加载一个网址,在完成加载后,该网址将更改为另一个网址。 我怎样才能捕获新的网址。
getURL()
始终返回第一个 url,而不是第二个。
如果我使用浏览器,我可以看到新的 URL,但我无法从网络视图中获取。
您可以使用 webClient 并实现 shouldOverrideUrlLoading 来拦截所有 url 在 WebView 加载它们之前。
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// Here put your code
Log.d("My Webview", url);
// return true; //Indicates WebView to NOT load the url;
return false; //Allow WebView to load url
}
});
使用
getOriginalUrl ()
它返回当前页面最初请求的 URL
getUrl ()
并不总是与传递给 WebViewClient.onPageStarted
的 URL 相同,因为尽管该 URL 的加载已开始,但当前页面可能尚未更改。
getOriginalUrl ()
获取当前页面的原始 URL。这并不总是与传递给 WebViewClient.onPageStarted
的 URL 相同,因为尽管该 URL 的加载已经开始,但当前页面可能尚未更改。此外,可能存在重定向,导致 URL 与最初请求的 URL 不同。
在我的例子中,WebViewClient 没有显示 Web 视图上是否有更改,我认为这是有关正在运行的 Web 的信息。
我可以使用 OnProgressChanged 从 WebChromeClient 获取该信息,我不知道这是否会对人们有帮助,但这里是代码:
webview.webChromeClient = object : WebChromeClient(){
override fun onProgressChanged(view: WebView?, newProgress: Int) {
super.onProgressChanged(view, newProgress)
if (newProgress == 100) {
Log.d("testing", webview.getOriginalUrl())
Log.d("testing", webview.url)
}
}
}
这样我就可以知道加载了什么以及何时完成。
您必须通过 javascript 接口获取 onPageFinished 方法
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
webView.loadUrl("javascript:window.Android.onUrlChange(window.location.href);");
super.onPageFinished(view, url);
}
});
public class WebAppInterface {
Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void onUrlChange(String url) {
Toast.makeText(getApplicationContext(), url, Toast.LENGTH_SHORT).show();
}
}