【问题标题】:Disabling WebView links works on emulator but no on device禁用 WebView 链接在模拟器上有效,但在设备上无效
【发布时间】:2017-07-26 14:17:37
【问题描述】:

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

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

public class NoLinksWebViewClient extends WebViewClient {

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

我将我的 WebViewClient 设置为 NoLinksWebViewClient 类型的对象。它在模拟器上可以解决问题,但在我的真实手机上却不行。

如何解决?

【问题讨论】:

    标签: java android android-emulator android-webview


    【解决方案1】:

    简短的回答是您需要覆盖下面给出的两种方法。API 24 中不推荐使用 shouldOverrideUrlLoading(WebView view, String url) 方法,而 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;
        }
    

    希望这些对你有所帮助。

    【讨论】:

      【解决方案2】:

      我的代码在我的 api 25 模拟器上完美运行,但在我的手机上却没有 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 中该方法将被替换为不同的方法,因此它仍然调用旧的(现已弃用)方法。

      我认为要解决此问题,您应该重写这两种方法。

      【讨论】:

        【解决方案3】:

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

        Documentation

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多