在指定 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
- •APICloud平台的融雲2.0集成2016-04-06
- •關於APICloud開發iOS出現不全屏問題2016-06-27
- •APICloud的iOS模塊開發過程2016-02-17
- 猜你在找
