javascript跨框架函數(shù)相互調用,具體代碼如下:
var idName = "FrameCall";
var idNameAll= "#"+idName;
var ie = !-[1,];//是否ie
return{
apiOpen:function(){
var html = '<input id="FrameCall" type="hidden" action="1" value="1" onclick="FrameCall.api()" />';
$(html).prependTo('body');
},
//其他窗口調用該窗口函數(shù),調用另一個frame的方法
api:function(){
var action = $(idNameAll).attr('action');
var value=$(idNameAll).attr('value');
var fun=action+'('+value+');';//拼裝執(zhí)行語句,字符串轉換到代碼
eval(fun);
},
//該窗口調用父窗口的子窗口api,調用iframe框架的js函數(shù).封裝控制器。
doFunction:function(iframe,action,value){
var obj = window.parent.frames[iframe].document;
obj=obj.getElementById(idName);
$(obj).attr("action",action);
$(obj).attr("value",value);
obj.click();
},
//該窗口調用父窗口的子窗口api,調用iframe框架的js函數(shù).封裝控制器。
doTopFunction:function(iframe,action,value){
var obj = window.top.frames[iframe].document;
obj=obj.getElementById(idName);
$(obj).attr("action",action);
$(obj).attr("value",value);
obj.click();
},
//該窗口調用父窗口的api
fatherFunction:function(action,value){
if (ie){//獲取兄弟frame的dom樹
var obj=window.parent.document;//IE
}else{
var obj=window.parent.document;//chrome safari firefox...
}
obj=obj.getElementById(idName);
$(obj).attr("action",action);
$(obj).attr("value",value);
obj.click();
},
//___自定義通用方法,可在頁面定義更多提供給接口使用的api。
goUrl:function(url){
window.location.href=url;
},
goRefresh:function(){
window.location.reload();
}
}
})();
$(document).ready(function() {
FrameCall.apiOpen();
});
/*
* iframe之間函數(shù)調用
*
* main frame中每個frame需要name和id,以便兼容多瀏覽器
* 如果需要提供給其他frame調用,則需要在body中加入
* <input id="FrameCall" type='hidden' action='' value='' onclick='FrameCall.api()'/>
* 調用例子:Frame.doFunction('main','goUrl','"'+url+'"');該frame調用id為main的兄弟frame的goUrl方法,參數(shù)為后面的
* 參數(shù)為字符串時需要加引號,否則傳過去會被理解成一個未定義變量
*/
更多信息請查看IT技術專欄