作者:七彩咩_131 | 来源:互联网 | 2024-11-23 19:50
execScript 方法详解
此方法用于在特定的窗口或框架中执行 Javascript 脚本,支持对框架组中的框架执行操作。如果未指定名称和框架名称,则默认在当前窗口中执行脚本。具体执行逻辑如下:
execScript({params})
- params
- name: 类型:字符串;默认值:无;描述:(可选)窗口名称,用于跨窗口执行脚本,首页名称为 root。
- frameName: 类型:字符串;默认值:无;描述:(可选)框架名称。
- script: 类型:字符串;默认值:无;描述:待执行的 Javascript 代码。
示例代码
// 在当前窗口中执行 jsfun 脚本
var jsfun = 'funcGoto();';
api.execScript({
script: jsfun
});
// 在当前窗口中名为 frmName 的框架中执行 jsfun 脚本
var jsfun = 'funcGoto();';
api.execScript({
frameName: 'frmName',
script: jsfun
});
// 在名为 winName 的窗口中执行 jsfun 脚本
var jsfun = 'funcGoto();';
api.execScript({
name: 'winName',
script: jsfun
});
// 在名为 winName 的窗口中名为 frmName 的框架中执行 jsfun 脚本
var jsfun = 'funcGoto();
api.execScript({
name: 'winName',
frameName: 'frmName',
script: jsfun
});
补充说明
执行逻辑遵循:先确定目标窗口,再确定框架,最后执行脚本。
- name 参数: 如果未提供或为空字符串,将默认在调用 execScript 的窗口中执行脚本;如果提供了非空字符串但找不到对应窗口,则不执行任何操作。找到对应窗口后,将继续根据 frameName 参数确定框架。
- frameName 参数: 如果未提供或为空字符串,将在当前窗口中执行脚本;如果提供了非空字符串但找不到对应框架,则不执行任何操作。找到对应框架后,将在该框架中执行脚本。
对象参数传递示例
// 正确传递对象的方式
var obj = {'id': 1, 'name': 'ffhh'};
var objStr = JSON.stringify(obj);
console.log('getjson(' + objStr + ')');
api.execScript({
name: 'root',
frameName: 'frame1',
script: 'getjson(' + objStr + ')' // 将对象转换为 JSON 字符串并作为参数传递
});
// 在 frame1 页面定义 getjson 函数
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'}