Android API 30上的Nativescript WebView产生ERR_ACCESS_DENIED



我有一个NativeScript 6.8 JavaScript应用程序,它使用WebView来显示引用本地图像文件的应用程序内组成的html字符串。Google Play商店强迫我支持API 30,当我这样做时,WebView失败了

net::ERR_ACCESS_DENIED(-1)

我发现这篇文章,建议我修改一些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错误屏幕。但是,如果我重新导航到页面,我只会看到设置设置;消息和HTML正确显示。就好像设置起作用了,但设置得不够快。将代码移动到LoadStarted事件没有效果。

我觉得我很接近;我欢迎任何帮助。

我将代码移动到页面的加载事件处理程序,现在一切都按预期工作,我不使用WebView的loadStarted或LoadFinished事件。最后的代码是

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);
}