需要从子iframe中更改父iframe的@src

时间:2011-09-22 23:09:23

标签: javascript jquery html asp.net-mvc-3 iframe

我有以下HTML标记(不要问....)

- document  //main site
  - <iframe>  //my site
    - <iframe>  //site within my site
      - <frame>
        - <a onclick="JavaScript:parent.parent.location.href='http://bla.com;return false;'">

基本上,主站点在iframe中调用我的站点。反过来,我在我的网站上也有一个iframe,我正在呼叫第三个网站。第三个站点有一个框架集,框架中有一个链接。点击此链接时,必须更改我的网站的网址。我的网站和我的孩子网站位于同一个域中。当我将我的网站作为“独立”(而不是iframe)运行时,上述代码在所有浏览器中都能正常运行。

一旦我在主站点的iframe中打开我的站点,看起来上面的代码正在尝试更改主站点的源代码。在FireFox中,我收到一条控制台消息“访问属性被拒绝”。在IE中,它打开了一个新窗口,我的网站不在主站点中。

当我在iframe中时,更改网站上@src属性的正确JavaScript是什么?

4 个答案:

答案 0 :(得分:2)

你正在把头撞到same origin policy这里的墙上。这是XSS国家,严格禁止,除非两个域同意一起谈话。

您可以阅读有关cross domain communication using iframes的更多信息,但同样,除非不同的域名同意一起讨论,否则您运气不佳。

虽然这看起来令人沮丧,但下次使用家庭银行时,请对此规则感到高兴;)

答案 1 :(得分:2)

你可以尝试这样的事吗

<document> //main site
  <iframe id="my_iframe"> //your site
     <iframe> //site within your site
       <frame>
         <a onclick="JavaScript:Top.document.getElementById('my_iframe').location.href='http://bla.com;return false;'">

Top指向主窗口,然后getElementById('my_iframe')将为您提供iframe元素。

答案 2 :(得分:0)

我相信您正在尝试在不同页面之间进行通信。 您可以查看此API:HTML5 Cross Document Messaging

基本上,如果您想告诉父iframe导航到某个网址,您可以这样做:


在我网站的网站 html:

// onclick of your anchor, post message (an event) with an expected origin
window.postMessage("http://bla.com", "www.sitewithinmysite.com");

我的网站 html:

// listen to the event "message"
window.addEventListener("message", messageHandler, true);
function messageHandler(e) {
    // only recognize message from this origin
    if (e.origin === "www.sitewithinmysite.com") {
        // then you can navigate your page with the link passed in
        window.location = e.data;
    }
}

答案 3 :(得分:0)

您可能希望使用AJAX进行页面通信。让需要更改其URL的站点通过长轮询侦听到node.js服务器。