javascript跨框架函數(shù)相互調用

字號:


    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ù)為字符串時需要加引號,否則傳過去會被理解成一個未定義變量
    */