我有以下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是什么?
答案 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服务器。