Android API 30上的Nativescript WebView生成ERR_ACCESS_DENIED [英] Nativescript WebView on Android API 30 yields ERR_ACCESS_DENIED

查看:58
本文介绍了Android API 30上的Nativescript WebView生成ERR_ACCESS_DENIED的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个NativeScript 6.8 JavaScript应用程序,它使用WebView显示在该应用程序中编写的引用本地图像文件的html字符串。Google Play商店强制我支持API 30,当我这样做时,WebView失败并显示

net::ERR_ACCESS_DENIED(-1)

我发现this post建议我修改Android WebView的一些访问设置,使我的代码现在看起来如下所示

AndroidManifest.xml:

<application 
  ...
  android:usesCleartextTraffic="true">

xml:

<GridLayout>  
  <WebView id="annbyday" loadFinished="onLoadFinished" src="{{ htmlsrcForDay }}" />
</GridLayout>

js:

exports.onLoadFinished = function (args) {

  if (args.object.android) {
    if (!args.error) {
      let webView = args.object.android;
      webView.getSettings().setAllowFileAccess(true);
      webView.getSettings().setAllowContentAccess(true);
      console.log("announce-page.onLoadFinished:  settings set");
    } else {
      console.warn("announce-page.onLoadFinished:  " + args.error);
    }
  }
}

当我运行此命令时,在控制台中收到以下消息:

JS: announce-page.onLoadFinished:  settings set
JS: announce-page.onLoadFinished:  net::ERR_ACCESS_DENIED(-1)
JS: announce-page.onLoadFinished:  net::ERR_ACCESS_DENIED(-1)
JS: announce-page.onLoadFinished:  settings set

第一次导航到该页面时,会显示Android错误屏幕。但是,如果我重新导航到该页面,我得到的只是";settings set";消息,并且html显示正确。 好像设置起作用了,但是设置得不够快。将代码移动到LoadStarted事件没有任何效果。

我觉得我快到了;欢迎任何帮助。

WebView

我将代码移到页面的已加载事件处理程序中,现在一切都按预期工作,并且我根本不使用推荐答案的loadStarted或LoadFinded事件。最后的代码是

exports.onLoaded = function (args) {
  const page = args.object;
  const webView = page.getViewById("<WebView id>");
  if (webView.android) {
    let setter = webView.android.getSettings();
    setter.setAllowFileAccess(true);
    setter.setAllowContentAccess(true);
  }

这篇关于Android API 30上的Nativescript WebView生成ERR_ACCESS_DENIED的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆