禁用 WebView 链接在模拟器上有效,但在设备上无效

Disabling WebView links works on emulator but no on device

我希望禁用我正在加载的页面链接到我的 WebView 对象。我的代码在 api 25 的模拟器上完美运行,但在我的 phone 和 23 api.

上运行不正常

这是阻止我的 WebView 链接的代码:

public class NoLinksWebViewClient extends WebViewClient {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        return true;
    }
}

我将 WebViewClient 设置为 NoLinksWebViewClient 类型的对象。它在模拟器上起作用,但在我的真实 phone.

上不起作用

如何解决?

javafx.scene.Node.setDisable(boolean arg0) 是一个选项吗?这样你就可以阻止元素被使用

Documentation

My code works perfectly on my emulator with api 25, but not on my phone with 23 api.

我认为关键区别不在于模拟器与设备,而是不同的 API 级别。 如果您查看 WebViewClient 上的文档,您会注意到有两种相似但不同的方法:

// since API 24
boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
// before API 24, now deprecated
boolean shouldOverrideUrlLoading(WebView view, String url)

由于您只覆盖了较新的方法,因此在您的旧设备上默认逻辑有效。发生这种情况是因为显然 API 23 设备无法知道在 API 24 中该方法将被不同的方法替换,因此它仍然调用旧的(现已弃用)方法。

我认为要解决此问题,您只需覆盖这两种方法即可。

简短的回答是你需要覆盖给定的方法 below.The shouldOverrideUrlLoading(WebView view, String url) method is deprecated in API 24 并且 shouldOverrideUrlLoading(WebView view, WebResourceRequest request) 方法被添加到 API 24.

 @SuppressWarnings("deprecation")
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return true;
    }

    @TargetApi(Build.VERSION_CODES.N)
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
       return true;
    }

希望这些对你有帮助。