从iframe动作重定向父窗口


312

我需要使用什么JavaScript从iframe重定向父窗口?

我希望他们单击​​超链接,该超链接将使用JavaScript或任何其他方法将父窗口重定向到新URL。


5
窗口,本身可以是一个IFrame,也。由于接受的答案针对顶部窗口,因此建议您稍微更改一下问题。
罗恩·克莱恩

Answers:


521
window.top.location.href = "http://www.example.com"; 

如前所述,将重定向父iframe。


我不认为此处适用相同的原产地政策。您应该能够将网站从其他人的iframe中分离出来,这很有意义。
Brian McAuliffe 2014年

1
在Chrome中,@ Parris jsfiddle引发此错误:不安全的JavaScript尝试从URL为“ parrisstudios.com/tests/iframe_redirect.html ”的框架启动URL为“ jsfiddle.net/ppkzS ”的框架的导航。试图浏览顶级窗口的框架已被沙箱化,但是未设置“ allow-top-navigation”标志。
Bjarte Aune Olsen

1
@BjarteAuneOlsen有趣,可能是chrome或webkit的最近更改。以前肯定可以正常工作。已经有几年了:)。答案还用于说明已应用了相同的来源策略,该策略以前使答案不正确,但现在使其正确且我的注释错误-_-。
帕里斯

4
@BjarteAuneOlsen-我相信这是因为JSFiddle上的Iframe被故意沙箱化,因此它们明确拒绝了某些功能(例如重定向等)-存在使用JS离开JS Fiddle并失去工作的危险。 ..
Zhaph-Ben Duguid 2015年

10
人们遇到这里的错误是因为要求iFrame的新的HTML5属性,“ sandbox” - developer.mozilla.org/en-US/docs/Web/HTML/Element/iframesandbox属性防止JavaScript的iframe中采取某些行动依据在给定的允许动作白名单上。该allow-top-navigation属性是您可以在白名单中启用的操作之一,该操作可使此代码起作用。如果该sandbox属性不存在,则允许执行所有操作。如果存在且为空字符串,则拒绝所有操作。
Marcus Harrison

115

我发现也<a href="..." target="_top">link</a>可以


7
虽然选择的答案是正确的,但我认为这对于问题的意图而言是更好的答案。此外,它也将对禁用JS的人有效。
迈克尔-克莱西克在哪里

我同意这是最好的解决方案,但是OP特别要求使用javascript。另一方面,OP指定应该通过锚点触发-我看不到有人会被迫使用锚点标记中的javascript来实现所需结果的情况,因此这个问题具有误导性。
nocarrier

2
如此简单而优雅。像魅力一样工作:)
Yash

54
window.top.location.href = "http://example.com";

window.top 指框架层次结构顶部的页面窗口对象。


9
无法从iframe更新window.top.location.href属性,它会导致拒绝执行访问。仅当您在本地主机上进行测试时才能执行该命令
Muhammad Ummar 2010年

4
@Ummar:我要补充一点,当iframe的父级具有相同的域,相同的端口(相同的原始策略)时,这是可行的,当它们不同时,它会引发拒绝访问的异常,以防止安全漏洞
Quan Mai

5
@Ummar不正确,请使用jsfiddle.net/ppkzS进行证明。您可以更改window.top.location.href。你只是看不懂。适用于Chrome。
帕里斯

很棒的jsfiddle @Parris,为我解决了这个问题:)
Max Williams

2
我怀疑某些怀疑者可能已经在iframe中尝试过类似的操作:window.top.location.href = window.top.location.href ;
mjj1409


15

target="_parent"对我来说很棒。简单而轻松!


这些似乎很棒。使用此方法而不是使用Java有什么弊端?
flyL123

从来没听说过。如果发现什么,就分享。
rDroid 2015年

7

@MIP是正确的,但是在Safari的较新版本中,您将需要添加沙箱属性(HTML5)以提供对iFrame的重定向访问。可以添加一些特定的值,并在它们之间添加一个空格。

参考(您需要滚动):https : //developer.mozilla.org/zh-CN/docs/Web/HTML/Element/iframe

例如:

<iframe sandbox="allow-top-navigation" src="http://google.com/"></iframe>

请注意,该sandbox属性为中的内容启用了一组额外的限制<iframe>。该sandbox属性的值删除了特定的限制。因此,请小心使用此功能。w3schools.com/tags/att_iframe_sandbox.asp
gitaarik


3

如果您想重定向到另一个域而无需用户执行任何操作,则可以使用带有属性的链接:

target="_parent"

如前所述,然后使用:

document.getElementById('link').click();

使它自动重定向。

例:

<!DOCTYPE HTML>

<html>

<head>

</head>

<body>

<a id="link" target="_parent" href="outsideDomain.html"></a>

<script type="text/javascript">
    document.getElementById('link').click();
</script>

</body>

</html>

注意:声明链接后,必须使用javascript click()命令。


1

可以从iframe重定向,但不能从父级获取信息。




-2

我们必须使用window.top.location.href从iframe动作重定向父窗口。

演示网址


1
我们是谁 :)您能将url的基本部分写进答案吗?URL /链接可能会更改或删除。
YesThatIsMyName

-8

通过同一父项中的iframe重定向父项窗口中的iframe:

window.parent.document.getElementById("content").src = "content.aspx?id=12";
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.