使用 cordova 构建 Android应用,并添加 cordova热门代码插件,以便自动更新应用,并使用 Fetch API 加载位于当前项目目录中的 JSON文件,问题是更新应用程序时,任何JSON文件都无法重新加载,并抛出错误
Fetch API无法加载file:///android_asset/www/xx/xxx.json。网址 方案"文件"不受支持。
如何在Android应用中解决此Fecth错误?或者是否有任何需要添加到我的cordova项目的插件?
答案 0 :(得分:2)
https://github.com/github/fetch/pull/92#issuecomment-140665932
您可以使用XMLHttpRequest来加载本地资产。
答案 1 :(得分:1)
我遇到了同样的问题,因为在Android中使用fetch()
(使用Cordova)使用了file://
协议,因为使用了相对URL来获取Android中Cordova应用程序中的资源,错误。
Jan的回答和MDN网络文档中的以下页面共同解决了我的问题:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data
就我而言,这与以下事实有关:使用fetch
检索音频文件,我可以在响应中调用arrayBuffer()
,但在示例{{1 }}所关联的功能。
诀窍是需要在XHR对象上设置fetchLocal()
。
我的responseType
函数如下所示:
fetchLocal
为我解决的事情是添加以下行:
function fetchLocal(url) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest
xhr.onload = function () {
resolve(new Response(xhr.response, { status: xhr.status }))
}
xhr.onerror = function () {
reject(new TypeError('Local request failed'))
}
xhr.open('GET', url)
xhr.responseType = "arraybuffer";
xhr.send(null)
})
};
答案 2 :(得分:0)
我使用以下代码避开了use strict;
use warnings;
use feature qw( say );
my $i = 12;
my @ST; # Stack
{ push @ST, \( $i ); }
{ push @ST, \( 2 ); }
{ my ($lhs_p, $rhs_p) = splice(@ST, -2); push @ST, \( $$lhs_p /= $$rhs_p ); }
{ push @ST, \( 100 ); }
{ push @ST, \( $i ); }
{ my ($rhs_p, $lhs_p) = splice(@ST, -2); push @ST, \( $$lhs_p = $$rhs_p ); }
{ my ($lhs_p, $rhs_p) = splice(@ST, -2); push @ST, \( my $sum = $$lhs_p + $$rhs_p ); }
{ push @ST, \( $i ); }
{ my ($rhs_p, $lhs_p) = splice(@ST, -2); push @ST, \( $$lhs_p = $$rhs_p ); }
say $i; # 200
的类似问题。我不想使用Jan答案中链接中的代码,因为我不想手动流式传输数据(该代码产生的响应对象没有fetch()
属性)。
responseText
答案 3 :(得分:0)
使用 axios:
const blob = await axios.get(url, { responseType: 'blob'}).then(resp => resp.data)