【发布时间】:2018-08-21 20:32:11
【问题描述】:
如何查看Url变成WebView
@Deprecated
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
{
String url = view.getUrl();
return true;
}
此功能仅适用于第一次更改
【问题讨论】:
如何查看Url变成WebView
@Deprecated
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
{
String url = view.getUrl();
return true;
}
此功能仅适用于第一次更改
【问题讨论】:
不知道为什么要添加 @Deprecated 注释,但据我所知,旧的 shouldOverrideUrlLoading 方法确实是 deprecated in API level 24.
因此,如果您的 minSdkVersion 为 24 或更高,您只能使用 public boolean shouldOverrideUrlLoading(WebView, WebResourceRequest),但使用 shouldOverrideUrlLoading()(就像您的代码一样)可以在 URL 更改时获取 previous URL。如果要在 URL 更改后获取当前 URL,可以使用 @JavascriptInterface
首先你应该创建一个自定义WebViewClient
public class MyWebViewClient extends WebViewClient {
// inject javascript method 'onUrlChange'
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:window.android.onUrlChange(window.location.href);");
};
// if your minSdkVersion is 24 you can only use this
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
{
String url = view.getUrl();
// Log.d("LOG","previous_url: " + url);
return false;
}
static class MyJavaScriptInterface {
@JavascriptInterface
public void onUrlChange(String url) {
// Log.d("LOG", "current_url: " + url);
}
}
}
如果您愿意,我将这两种方法都放入其中,您可以取消注释 Log.d(...) 行以检查 URL
在您的 MainActivity.java 中
...
WebView mWebView = (WebView) findViewById(R.id.YOUR_VIEW_ID);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new MyWebViewClient());
mWebView.addJavascriptInterface(new MyWebViewClient.MyJavaScriptInterface(),
"android");
mWebView.loadUrl(YOUR_TARGET_URL);
...
不要忘记将<uses-permission android:name="android.permission.INTERNET" /> 放入AndroidManifest.xml
【讨论】:
请在本期使用shouldInterceptRequest
@Override
public WebResourceResponse shouldInterceptRequest (final WebView view, String url) {
return super.shouldInterceptRequest(view, url);
}
它可以用来检查webview中所有的url变化
【讨论】: