获取来自其他域的iframe完整网址

时间:2011-08-02 09:05:11

标签: javascript url iframe cross-domain communication

父页面可以获取iframe的URL(和片段),但在iframe更新其URL片段后,父级无法获取带有片段的更新URL。

示例iframe网址: http://example.com/a/b/c/d.html?k1=v1#i1=j1(注释片段)

这是在跨域环境中。父域与iframe域不同。目前只使用firefox进行测试。

使用以下代码:

var ifr = document.getElementById('myiframe');
if(ifr){
   alert(ifr.src);
}

由于安全性,这是不可能的吗?

我正在尝试使用片段作为有效负载来使iframe与父进行通信。

这两个域都在我的控制之下,我试图避免在页面之间实现通信的漫长道路。

是否有其他技术不涉及服务器往返?

1 个答案:

答案 0 :(得分:1)

您可以通过在任何postMessage对象上调用window来使用window.postMessage API在帧之间进行通信。这适用于跨域消息传递,只要接收帧具有message事件侦听器。

postMessage用法:

otherWindow.postMessage(message, targetOrigin);
//e.g.
yourIFrame.contentWindow.postMessage({curURL: location.href}, "http://www.your2ndDomain.com");
//or
top.postMessage({curURL: location.href}, "http://www.your1stDomain.com");

收听讯息:

window.addEventListener("message", function(e){
  //You must check your origin!
  if(event.origin !== "http://www.your1stDomain.com")
    return;
  //Get the data
  var data = event.data;
  alert(data.curURL);
}, false);