APICloud api.execScript 参数传对象问题

execScript

在指定 window 或者 frame 中执行脚本,对于 frameGroup 里面的 frame 也有效,若 name 和 frameName 都未指定,则在当前 window 中执行脚本,具体执行逻辑见补充说明。

execScript({params})

params
name:

类型:字符串
默认值:无
描述:(可选项)window 名称,若要跨 window 执行脚本,该字段必须指定,首页的名称为 root
frameName:

类型:字符串
默认值:无
描述:(可选项)frame名称
script:

类型:字符串
默认值:无
描述:js代码
示例代码

示例代码

//在当前window中执行jsfun脚本
var jsfun = 'funcGoto();';
api.execScript({
    script: jsfun
});

//在当前window中找到名为frmName的frame,并在该frame中执行jsfun脚本
var jsfun = 'funcGoto();';
api.execScript({
    frameName: 'frmName',
    script: jsfun
});

//在名为winName的window中执行jsfun脚本
var jsfun = 'funcGoto();';
api.execScript({
    name: 'winName',
    script: jsfun
});

//在名为winName的window中找到名为frmName的frame,并在该frame中执行jsfun脚本
var jsfun = 'funcGoto();';
api.execScript({
    name: 'winName',
    frameName: 'frmName',
    script: jsfun
});

补充说明

统一处理逻辑为:exec->window->frame

name 参数: 当 name 不传值,或者传空字符串的情况下,execScript 对象为调用 execScript 的window(该 window 可能位于屏幕或者后台),在该 window 中继续 frameName 的逻辑; 当 name 传值且非空字符串,但并未找到名为 name 的 window,则直接返回不处理(不论 frameName 是否有值)。若找到了对应的 window,则在该 window 中继续 frameName 的逻辑;

frameName 参数: 当 frameName 不传值,或者传空字符串的情况下,execScript 对象为调用 execScript 的 window(该 window 可能位于屏幕或者后台),在该 window 中执行 script; 当 frameName 传值且非空字符串,但并未找到名为 frameName 的 frame,则直接返回不处理。若找到了该 frame,则在该 frame 中执行 script。

以上是官方的api使用说明,当我们需要在页面之间相互跳转传递参数时应该这么做

正确传对象写法:
var obj ={'id':1,'name':'ffhh'};
var objStr =JSON.stringify(obj);
console.log('getjson('+objStr+')');
api.execScript({
      name:'root',
      frameName:'frame1',
      script : 'getjson('+objStr+')'
});

frame1页面:
function getjson(obj){
      console.log(typeof(obj));
      console.log(obj.name);
}
传参数
var obja = {'name':'fff'}        
var objStr =JSON.stringify(obja);                
api.execScript({
    name:'root',
    frameName : 'frame1',
    script : 'var objJson='+objStr
});

//frame1页面
console.log(typeof(objJson));//object类型
console.log(JSON.stringify(objJson));//输出 {'name':'fff'}

 

打赏

共有 0 条评论

Top