APICloud execScript 传参的参数类型问题

最近遇到了一个细节问题,需要使用execScript,把frame中的数据传递到window中,但是在传参过程中遇到了数据类型变化的问题,导致拿该参数的值做逻辑处理时,报错的bug。
execScript的参数不能是对象,即:不能传递对象,参数只会作为字符串传递。例如,json类型的参数:value为整型,取的时候也会成为字符串。

message_talk_person.html页面 以openFrame的方式打开了message_talk_person_bot_frm.html页面。现在要将message_talk_person_bot_frm.html中的的hasRead的值 传到message_talk_person.html页面。

写法一:hasReadFunc方法的参数 hasRead被两个单引号修饰

message_talk_person_bot_frm.html页面

var hasRead = true;
var jsfun = "hasReadFunc('"+hasRead+"');";
api.execScript({
      script: jsfun
});

message_talk_person.html页面

function hasReadFunc(obj) {
  hasRead = obj;
  alert(typeof(obj));

}

打印得知hasRead是个字符串类型的true

APICloud execScript 传参的参数类型问题_第1张图片
image.png

写法二:hasReadFunc方法的参数直接写 hasRead

var hasRead = true;
var jsfun = "hasReadFunc("+hasRead+");";
api.execScript({
      script: jsfun
});

message_talk_person.html页面

function hasReadFunc(obj) {
  hasRead = obj;
  alert(typeof(obj));

}

打印得知hasRead是个布尔类型的true

APICloud execScript 传参的参数类型问题_第2张图片
a.jpg

总结:execScript中写的回调函数的参数,无论参数是什么类型的,只要参数被单引号包围,都会变成字符串,若不被单引号包围,该是什么类型就是什么类型。平时传参遇到问题的时候,要多打印打印数据的类型,不要出现我这种低级错误。

我的这篇文章对上面的问题做了些补充-JSON字符串和JSON对象的区别

我的这篇文章介绍了apicloud使用api.execScript({})传递JSON数据

你可能感兴趣的:(APICloud execScript 传参的参数类型问题)