页面跨域传参 nginx iframe

设定TT和KB为不同的域

1、TT set-ticket-type.html页面div中装iframe(指向KB页面 documentDisplay.jsp
    < div id = "tt-type-kb" style =" display : none " >
          < iframe   name = "tt-type-kb-display"  src = "/CS/cs/kb/query/documentDisplay.jsp?multiselect=true&crossPage=true&PERMIT_CHANNEL=2&routeSrc=troubleticket" width = "100%"  height = "500px" >
          </ iframe >
    </ div >
 
    $.openPopupDiv( 'tt-type-kb' , 'Knowledge Base' , '1024' , '545' ,
       { "onConfirm" : "ticketType.closePopupDivForKBPage()" , "draggable" : true , "resizable" : true });
 
2、nginx配置反向代理
     #设置知识库的菜单代理
        location /CS {
           #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
           proxy_set_header Host $Host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           #禁用缓存
           proxy_buffering off;
           #设置反向代理的地址
           proxy_pass http://xxxx.xxxx.xxx.xx:0000/CS;                                                                                      
        }
     只有配置反向代理,tt才能访问kb页面的方法:
     window.frames[ "tt-type-kb-display" ].submitSelected();
     submitSelected()为kb的方法,包含下面的逻辑(获取数据,传参)
 
3、KB页面操作结束时创建一个Iframe,指向TT的页面,将数据作为参数发送到TT页面kbCallback.html  
     var list = new Array();
     var obj = new Object();
     obj.documentId = docTable.getValue(rows[i], "DOCUMENT_ID" );
     obj.documentName = docTable.getValue(rows[i], "DOCUMENT_NAME" );
     list.push(obj);
     var ff = document.createElement( "iframe" );
     ff.style.visable = "hidden" ;
     ff.style.display= 'none' ;
     ff.src= "/ARIESRES/crm-bj/trouble-ticket/ticket-type/kbCallback.html?kbId=" +JSON.stringify(list);
     document.body.appendChild(ff);
 
4、在kbCallback.html页面获取KB传过来的值,再传给set-ticket-type.js
<! DOCTYPE html>//文档头,在ie8需要强制使用标准渲染模式才能使用json
< html > < body > </ body > </ html >
< script >
      window.onload = function (){
             var url = location.search;
             var str = "" ;
             if (url.indexOf( "?" ) != -1) {
                  str = url.substr(url.indexOf( "=" )+1);
                  str = decodeURIComponent(str);
            }
             var param = JSON.parse(str);
            parent.parent.ticketType.doAfterActionForKBPage(param);
      }
</ script >
 
注意1: kbCallback.html的parent是documentDisplay.jspdocumentDisplay.jsp的parent是set-ticket-type.html,所以用parent.parent.function
注意2: kbCallback.html 是个空页面,作为桥梁使用
 
 
 
 
 

猜你喜欢

转载自gp562.iteye.com/blog/2288070