您的位置:首页 > 其它

web不同域之间互传数据

2010-01-15 13:07 288 查看
今天开发的时候需要调用到其他部门的的一个地址,发过来的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方法,这个方法会把数据返回。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: