api.execScript
在指定 window 或者 frame 中执行脚本,对于 frameGroup 里面的 frame 也有效,若 name 和 frameName 都未指定,则在当前 window 中执行脚本,具体执行逻辑见补充说明。
execScript({params})
params
name:
- 类型:字符串
- 默认值:无
- 描述:(可选项)window 名称,若要跨 window 执行脚本,该字段必须指定,首页的名称为 root
frameName:
- 类型:字符串
- 默认值:无
- 描述:(可选项)frame名称
script:
- 类型:字符串
- 默认值:无
- 描述:js代码
示例代码
//在名为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
});
//在当前window中找到//名为frmName的frame,并在该frame中执行jsfun脚本var jsfun = 'funcGoto();';
api.execScript({
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。
可用性
iOS系统,Android系统
接下来说一说这个方法在项目中的实际应用.
应用场景:
如上图所示,当选择入学时间,毕业时间的时候,需要从下方空白处弹出一个新的frame,在新的frame中添加模块控件
UICustomPicker,代码如下:
apiready = function(){
var text = api.pageParam.text4;
varUICustomPicker = api.require('UICustomPicker');
// if(UICustomPicker == nil){
UICustomPicker.open({
rect: {
x: 10,
y: 0,
w: 320,
h: 100
},
styles: {
bg: 'rgba(0,0,0,0)',
normalColor: '#959595',
selectedColor: '#3685dd',
selectedSize: 36,
tagColor: '#3685dd',
tagSize: 10
},
data: [{
tag: '年',
scope: '1980-2020'
}, {
tag: '月',
scope: ["01","02","03","04","05","06","07","08","09","10","11","12"]
}, {
tag: '日',
scope: ["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"]
}],
rows: 3,
id:1,
fixedOn: api.frameName,
fixed: true
}, function( ret, err ){
if( ret ){
// alert( JSON.stringify( ret ) );
time = ret.data[0]+"-"+ret.data[1] + "-" + ret.data[2];
//使用execScriptAPI,将时间作为参数进行传递.
var param = { date: time};
api.execScript({
name: 'win_addExperience.html',
script: 'funcGoto('+JSON.stringify( param )+')'
});
}else{
// alert( JSON.stringify( err ) );
}
});
};
此时点击时间输入框,就有上图所示的效果了.最终想要的是想将模块控件的数据 填写到window的输入框,这里就要用到主人公execScript这个API接口了.
整个过程大致是这样的:在时间Picker中选好时间,直接将时间作为json格式的参数,通过execScript在父window执行script方法,从而实现功能.
//frame 中execScript方法
//使用execScriptAPI,将时间作为参数进行传递.
var param = { date: time};
api.execScript({
name: 'win_addExperience.html',
script: 'funcGoto('+JSON.stringify( param )+')'
});
//win_addExperience.html中的script方法
function funcGoto(time){
text4.value = time.date;
}
这样,就可以实现所要的功能了,还是非常方便的!
- 顶
- 0
- 踩
- 0
- 上一篇iOS简单的本地缓存
- 下一篇WKWebView与JS的交互
我的同类文章
- •APICloud平台的融云2.0优化2016-07-07阅读577
- •APICloud平台的融云2.0集成2016-04-06阅读3160
- •关于APICloud开发iOS出现不全屏问题2016-06-27阅读426
- •APICloud的iOS模块开发过程2016-02-17阅读574
- 猜你在找
api.execScript的更多相关文章
- apicloud+融云实现即时通讯
请尊重作者的辛勤劳动!!! 使用apicloud开发已经快2个月了,起初的目的就是为了实现安卓和苹果的兼容,属于一个试验项目,究竟apicloud是否能够满足公司的要求?最 终看来还是不错的,使用ap ...
- APIcloud微信支付和支付宝支付(方案2,主要在后台进行)
支付宝代码 var aliPay = api.require('aliPay'); api.ajax({ url: yuming+'index.php/api/Alipay/getOrder', me ...
- apicloud 按返回键
api.addEventListener({ name: 'keyback' }, function(ret, err) { //调取index.html暴露的方法 api.execScript({ ...
- apicloud 自定义模块的开发与上架注意事项
模块开发要点与返回刷新页面注意事项 1.介绍 apicloud 除了使用官方提供的模块外,我们可以自定义一些模块供自己使用和上传到官方出售.针对没有提供或者价格过贵的模块,如果有时间自己可以进行研究. ...
- apcloud混合式开发app学习笔记
修改图标新建项目检出到本地--------------------------1.api.ajax var loginName = $api.val($api.byId('uname')); var ...
- apicloud踩坑集锦
最近在用apicloud开发,这里录入一些踩坑的地方,从头到尾,要多尴尬有多尴尬,新入app开发,记录一些心得,和遇到的坑以及解决办法. 1,apicloud 打包的Android app ,打开fr ...
- APICloud项目纪要
一.页面之间的传递参数通过pageParam传递参数: api.openWin({ name: 'ware', url: './ware.html', pageParam: { wareId: 'w1 ...
- Apicloud_(项目)网上书城03_拓展模块实现
Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud_(项目)网上书城02_后端数据获取 传送门 Apicloud_(项目)网上书城03_拓展模块实现 传送门 实现商品详情页 ...
- doT模板双重循环模板渲染方法
doT模板作为一个前端渲染模板,有着非常显著的有点.1.轻量.2.快捷.3.无依赖. 本文介绍一种几乎所有模板都会遇到的问题,双重循环渲染.我们知道在dot模板中循环渲染用的是{{~ it:value ...
随机推荐
- Effective Java(1)-创建和销毁对象
Effective Java(1)-创建和销毁对象
- LD算法的C++实现(基于编辑距离的文本比较算法)
算法看这里: http://www.cnblogs.com/grenet/archive/2010/06/01/1748448.html 用数组实现: #include <iostream> ...
- S11 day 96 RestFramework 之认证权限
一.设计一个简易的登录 1. 建立一个模型 class UserInfo(models.Model): username =models.CharField(max_length=) password ...
- Ubuntu16.04 - 安装gtk+-3.0和appindicator3-0.1
今天在Ubuntu16.04里面遇到这样的问题: # pkg-config --cflags gtk+-3.0 appindicator3-0.1Package gtk+-3.0 was not fo ...
- BZOJ 1719--[Usaco2006 Jan] Roping the Field 麦田巨画(几何&区间dp)
1719: [Usaco2006 Jan] Roping the Field 麦田巨画 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 82 Solved ...
- java的类继承(与c++对比)
1. interface的引入 使用interface来定义某一类通用操作,而又不强制规定其实现,对于Java的流行真是太重要了. 以JDBC举例.在Java之前,C++与数据库建立连接,常用的一个技 ...
- SharedFile System Master Slave(共享文件系统)做ActiveMQ集群
WINDOWS环境下:http://www.apache.org/dyn/closer.cgi?path=/activemq/apache-activemq/5.9.0/apache-activemq ...
- Android之常用类库
Android之常用类库 android.app :提供高层的程序模型.提供基本的运行环境android.content :包含各种的对设备上的数据进行访问和发布的类android.database ...
- eclipse代码中使用到Launcher获取类加载器,找不到启动器类。
解决:移除系统依赖的jar包,重新导入. 只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了 ...
- klee 测试一个简单的正则表达式匹配函数
函数源代码位于 klee源码 的examples/regexp文件夹下面:c程雪源码文件名为 Regexp.c First Step: 使用clang编译器将c源代码转化为llvm位码形式.如果你的 ...