java - 检查 webview android 中的 url 更改不起作用

标签 java android url webview

如何检查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 更改,则可以获取前一个 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

关于java - 检查 webview android 中的 url 更改不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51956309/

相关文章:

java - 如果我在 Android 上使用 webview,我是否必须应用 SSL 来加载 webview 上的 URL?

java 。如何返回广义对象?

java - ClassLoader.getResource 不断为现有资源返回 null

java - 从边缘删除值

java - 传递方法引用 NoClassDefFoundError

android - 将 GoogleApiClient 对象从一个 Activity 传递到另一个 Activity

java - 如果我在创建对象时已经打开连接,是否需要执行 HTTPUrlConnection.connect() ?

javascript - Angular - 使用哈希策略时如何获取 URL?

Java 字符串优化

java - 不明白spymemcached的示例代码