2011-05-16 89 views
2

子窗口的父窗口传递数据我有两个域说,X和Y,都是不同的服务器具有不同的IP上。从一个域到另一个DOMIAN

现在的情况是,域X的一个页面上有是打开域名为Y.上弹出一些数据

用户搜索弹出一个链接,然后点击“完成”

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

我正在使用PHP,HTML和js。

P.S:当域名是相同的,但我想在那里的域名和服务器是不同的解决方案中的事情的作品。

+0

看看这个JSONP的例子:http://www.ibm.com/developerworks/library/wa-aj-jsonp1/ – wdm 2011-05-16 06:36:08

回答

2

你需要调查

CORS(较旧的IE则需要XDR)或

window messaging

JSONP

通过URL

+1

我在读它,虽然一个演示代码将是非常可观的 – 2011-05-16 06:25:21

+0

有各地的演示。首先想想我们想要使用哪种技术。很抱歉,我没有时间粘贴4个示例或从头开始编写一些示例,因为我需要在两个域/子域上使用代码。如果您可以完全访问这两个域的代码,请尝试CORS。 – mplungjan 2011-05-16 06:29:10

+0

好的,谢谢我会尝试CORS并检查它是否可以解决我的问题 – 2011-05-16 06:41:38

5

我送变量只是想补充一点,那就是poss IBLE从一个窗口,一个域的数据传递到一个窗口经由window.name属性另一个域。当然,这个属性是不是为了这个目的,并语言纯化论者会恨我,这。然而,这是它是如何做的,快速和肮脏的:

在域X:

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:

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,因为我可以在一个对象中传递多个属性。

编辑:如果你需要结构域是将数据传回域X,你可以有结构域是在window.name保存数据并导航到域X的一个匆匆过客页面,该页面可以很容易地将数据传递给原来的窗口。试试这个:

在域Y:

// 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

// 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函数,它的数据,并做一些事情吧。

+2

这是一个很棒的黑客攻击。我已经在生产中使用它,没有任何问题。 – Shobhit 2016-04-11 12:37:53

1

我知道这是一个老问题,但我觉得这可能是一个更合适的问题的答案

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

window.addEventListener("message", function(event) { 
    console.log(event.data); // {user: 'data'} 
}, false); 

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

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

相关问题