【问题标题】:ERR_ACCESS_DENIED in webview in Android - only with sdk 30Android 网页视图中的 ERR_ACCESS_DENIED - 仅适用于 sdk 30
【发布时间】:2020-08-24 10:28:27
【问题描述】:

我正在升级我的应用,实际上它有 sdk 28,我需要升级到 29 才能允许在 11 月创建新版本。

sdk 30 它可用,所以我试试这个。该应用程序运行良好,我发现的唯一一件事是,当我尝试在 webview 中加载本地 html 文件时,webview 显示错误:

  • net:err_access_denied 代码为 -1

如果我将 sdk 版本从 30 更改为 29,它“神奇地”工作。

我不得不提到这个文件 html 是从服务器下载的,但是当我尝试在 webview 中打开它时,它存在,而且它显然是正确的。我可以使用其他应用程序(例如 es 文件资源管理器)查看。

¿这个新的 sdk 和 webview 中的本地 html 文件有一些限制吗?

【问题讨论】:

    标签: android webview


    【解决方案1】:

    我遇到了同样的问题,它似乎与 Android 11 中应用于 web 视图的最新更改有关:https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccess(boolean)

    现在您必须在 webview 的设置中调用 setAllowFileAccess(true) 才能使其工作。 sdk 29 及更低版本的默认值为 true,但现在您必须自己允许访问。

    【讨论】:

    • 是的。这是正确的答案,对我有用。不知道为什么 google 会改变结构。
    • 我尝试了这个和下面的其他建议,并且几乎可以在 NativeScript 6.8 JavaScript 项目中使用它 - 请参阅 stackoverflow.com/questions/69623445/…
    【解决方案2】:

    对于 NativeScript 添加

    androidSettings.setAllowFileAccess(true);
    androidSettings.setAllowContentAccess(true);
    

    到nativescript-webview-interface文件夹的index.android.js文件中的_setAndroidWebViewSettings

    【讨论】:

    • 你太棒了......我已经一个星期努力解决它了。
    【解决方案3】:

    我遇到了同样的问题,这是我使用 Kotlin 解决的方法

    webview.settings.allowFileAccess = true
    webview.settings.allowContentAccess = true
    

    【讨论】:

      【解决方案4】:

      要搭载 Nana 的出色答案,您无需修改​​插件代码,因为这样做会在您每次 npm i 时将您的更改吹走。改为这样做:

      webviewLoaded(args) {
        const view = args.object;
        if (view.android) {
          view.android.getSettings().setAllowFileAccess(true);
          view.android.getSettings().setAllowContentAccess(true);
        }
      }
      

      ^ 这就是 Nativescript 的真正魅力。

      【讨论】:

        【解决方案5】:

        我们在科尔多瓦的混合应用也遇到了同样的问题。

        将以下代码添加到文件 SystemWebViewEngine.java 对我们有用:

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
                settings.setAllowFileAccess(true);
                settings.setAllowContentAccess(true);
        }
        

        感谢您的回答,我们才得以找到自己的答案!

        【讨论】:

          【解决方案6】:

          更好的方法可能是使用新的 WebViewAssetLoader 类 - https://developer.android.com/reference/androidx/webkit/WebViewAssetLoader。这允许您的文件: URI 隐藏在一个特殊的 https:// URL 下,该 URL 被拦截,这似乎是 Google/WebKit 提供安全访问的新方式。

          【讨论】:

            猜你喜欢
            • 2021-12-05
            • 2021-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-08
            • 2022-08-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多