web不同域之间互传数据

今天开发的时候需要调用到其他部门的的一个地址,发过来的demo是

var userInArray =[]; //userInArray.push("ff80808123977698012398ea851b006b#高杰#2"); var userOutArray =[]; function test(){ document.domain ="remote.net"; userOutArray=window.showModalDialog("http://xxx.kk.yy.htm" ,userInArray,"dialogWidth=753px;dialogHeight=505px"); } function test2(){ alert(userOutArray[0]); }

 

关键是在document.domain ="remote.net";这个使得我可以访问他的页面,根据这个demo改好页面后,我点击保存,没有反应了,js错误提示“没有权限”,上网查了下知道是这个domain引起的,这个时候就想通过js来把domain改回去,但是都提示错误,网上查到:

  • document.domain 属性是不可以随便设置的,它只能被设置为文件所属域的上级域。如假设 ImgUpload.html 属于 img.mycompany.com ,那么它的 document.domain 属性可以设置为“mycompany.com” ,但不能设置为“img.mycompany” 或其他的,如“foo.com”。
  • 只有当两个域存在相同的上级域时,才能通过指定 document.domain 来实现它们之间的数据交换,并且 document.domain 属性必须被 设置为二者的公共域。例如,假设 NewsEdit.html 属于 news.mycompany.com,而 ImgUpload.html 属于 img.yourcompany.com,那么无论你如何设置 document.domain 都无法在它们之间交换数据;再比如,假设 ImgUpload.html 属于 img.mycompany.com,那么我们可以把两个页面的 document.domain 属性设置为“mycompany.com”,但不可以设置为“img.mycompany” 或其他的什么域,如“foo.com”。
  •       发现到这里这个调用没辙了,不应该在我的主页面改domain的,不然没法改回去。后来折腾了半天总算弄好了,主页面不动,代码改为

    var userInArray =[]; //userInArray.push("ff80808123977698012398ea851b006b#高杰#2"); var userOutArray =[]; function test(){ userOutArray=window.showModalDialog("myurl.jsp" ,userInArray,"dialogWidth=753px;dialogHeight=505px"); } function test2(){ alert(userOutArray[0]); }

    注意这里的domain不用设置了,然后把地址指向自己的页面,在自己的页面上做文章。

    然后是myurl.jsp代码

    <html> <head> <mce:script type="text/javascript"><!-- userInArray = window.dialogArguments; document.domain ="remote.net";//TODO: function userSelect(users){//callback self.returnValue = users; self.close(); } // --></mce:script> </head> <body> <!-- //TODO: --> <iframe id="some" src="http://xxx.kk.yy.htm" scrolling="no" frameborder="0" width="753" height="505"> </iframe> </body> </html>

     

    当然远程调用也改造过,会回调这个页面的userSelect方法,这个方法会把数据返回。

     

     

     

     


     

    你可能感兴趣的:(Web,function,domain)