html5 调用带参数js,NativeJS调用原生方法传递参数的长度问题

先看一段代码,我使用NativeJS实现将base64转换成文件保存到本地:

plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {

fs.root.getFile('tts.mp3', {

create: true

}, function(entry) {

// 获得平台绝对路径

var fullPath = entry.fullPath;

var Base64 = plus.android.importClass("android.util.Base64");

var strBase64 ='这是base64字符串,太长省略';

var bytes = Base64.decode(strBase64, 0);

var FileOutputStream = plus.android.importClass("java.io.FileOutputStream");

var out = new FileOutputStream(fullPath);

mui.alert(bytes.length);

out.write(bytes);

out.close();

});

});

这段代码本身是没有问题的,而我在测试中发现,有时候文件正常,而有时候文件是0B。

经过不断测试,包括图片、txt等文件格式,最终发现,这个与base64本身的大小有关系。

当我用4k以下的文件做测试时都能成功,4k以上都不成功(我并没有去确认是不是一定是4k这个临界值)

也就是说,base64超过一定大小时,var bytes = Base64.decode(strBase64, 0);这句代码得到的bytes是null。同样的,base64比较小时var bytes = Base64.decode(strBase64, 0);能得到正确的bytes,但是如果这个bytes超过一定大小,FileOutputStream.write也会执行出错,导致写不进数据。

而我转到AS里写原生代码,用同样的base64测试是没有问题的。所以,我得出的结论是,nativeJS传递参数的长度有限制。还请官方解答一下。最好有解决方案,我们用HB就是为了避免离线打包,减少打包工作,现在我又不得不写原生代码,然后安卓和ios又得分别离线打包。

·回复

一个最简单的例子:

var Toast = plus.android.importClass("android.widget.Toast");

var activity=plus.android.runtimeMainActivity();

var str='测试内容';

var t1=Toast.makeText(activity,str, Toast.LENGTH_LONG);

t1.show();

这是没问题的。只是当str超过一定长度就不行了。

而同样的超长str在原生代码里是没问题的

·回复

传入了多长的数据?

JS层到原生是有语言环境的转换,不要传入过长的数据。

·回复

Android系统webview数据传输时会有长度限制,如果需要传输超长数据,可以集成X5内核解决,https://ask.dcloud.net.cn/article/36806

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值