首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据从一个域的父窗口传递到另一个域的子窗口

问将数据从一个域的父窗口传递到另一个域的子窗口
EN

Stack Overflow用户
提问于 2011-05-16 13:56:58
回答 3查看 3.8K关注 0票数 2

我有两个域名说X和Y,都在不同的服务器上与不同的I。

现在的情况是,在域名X的一个页面上有一个链接,它打开了域名Y的弹出窗口。

用户在弹出窗口中搜索一些数据,然后单击"Done“

单击时,应将与搜索字段相关的值传递给域X上的页面。

为此,我使用了PHP、HTML和js。

附言:当域名是相同的,但我想要的解决方案中,域名和服务器是不同的。

EN

回答 3

Stack Overflow用户

发布于 2013-11-30 00:12:13

我只想补充一下,可以通过window.name属性将数据从一个域的窗口传递到另一个域的窗口。当然,这个属性并不是为这个目的而设计的,语言纯粹主义者会因为这个而讨厌我。尽管如此,这是如何做的,快速和肮脏:

在域X上:

代码语言:javascript
复制
var PREFIX = "your prefix here";
// The second parameter of window.open() sets window.name of the child window.
// Encode JSON and prepend prefix.
window.open("http://domain-y.example.com/", PREFIX + JSON.stringify({"foo":"bar", "abc":123}));

在域Y上:

代码语言:javascript
复制
var PREFIX = "your prefix here";
if(window.name.substr(0, PREFIX.length) == PREFIX){
    // Remove prefix and decode JSON
    var data = JSON.parse(window.name.substring(PREFIX.length));
    // Do what you need to do with the data here.
    alert(data.foo); // Should alert "bar"
}

PREFIX是可选的,但我更喜欢包含它,以防域Y被设置window.name属性的其他页面访问。还要注意,您不需要使用JSON (如果您使用的是恐龙浏览器,则不应该使用JSON ),但我喜欢JSON,因为我可以在一个对象中传递多个属性。

编辑:如果您需要域Y将数据传回域X,您可以让域Y将数据保存在window.name中,并导航到域X上的passer页面,该页面可以轻松地将数据传递到原始窗口。试试这个:

在域Y上:

代码语言:javascript
复制
// Somewhere earlier in the code:
var PREFIX = "your prefix here";
// Call this function when the Done button is clicked.
function passDataBack(data){
    window.name = PREFIX + JSON.stringify(data);
    window.location = "http://www.domain-x.com/passer.html";
}

在http://www.domain-x.com/passer.html上

代码语言:javascript
复制
// Somewhere earlier in the code:
var PREFIX = "your prefix here";
if(window.name.substr(0, PREFIX.length) == PREFIX){
    // Remove prefix and decode JSON
    var data = JSON.parse(window.name.substring(PREFIX.length));
    // Send data to parent window
    window.opener.processData(data);
}

在原始页面中,应该有一个名为processData的函数,它获取数据并对其执行某些操作。

票数 7
EN

Stack Overflow用户

发布于 2011-05-16 14:03:57

你需要调查

CORS (对于较旧的IE,您将需要XDR)或

window messaging或

JSONP或

通过url发送变量

票数 1
EN

Stack Overflow用户

发布于 2016-07-12 10:24:02

我知道这是一个老生常谈的问题,但我认为这可能是一个更恰当的答案。

您应该将以下代码添加到http://domain-x.com

代码语言:javascript
复制
window.addEventListener("message", function(event) {
  console.log(event.data); // {user: 'data'}
}, false);

..。在http://domain-y.com

代码语言:javascript
复制
userClicksDone() {
  try {
    // This may throw an error in case of people access
    // http://domain-y.com directly, not via popup from
    // http://domain-x.com
    //
    window.opener.postMessage({user: 'data'}, 'http://domain-x.com');
  } catch(e) { }

  // Closes this popup
  //
  window.close();
}

更多信息请访问Mozilla。致谢@mplungjan

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6013665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档