情景:
domain1.com托管域名网站的iFrame。
domain2.com使用javascript触发需要的动态链接 路由到父窗口。
链接都是相对路径。
点击/linkA.html(在domain2.com上的iframe中)将父级路由到 domain1.com/linkA.html。
var _generic =“/ linkA.html”;
$("#canvas").each( function () {
$(this).children("a").attr("href",_generic);
$(this).click( function(e) {
e.preventDefault();
window.parent.location.href = _generic;
} );
} );
将链接更改为absolute(domain2.com/linkA.html)可解决功能问题。
有没有人遇到过这个?
答案 0 :(得分:1)
为了让浏览器在设置相对路径时解析整个url,首先需要读取当前的href,这会被SOP阻止。
但我很确定如果您使用parent.location
代替parent.location.href
,那么这样就可以了。
答案 1 :(得分:1)
您应该尝试使用window.opener.location
代替window.parent.location
。
答案 2 :(得分:0)
我已经看到IE9与IE8,FireFox和Webkit的区别。请考虑以下代码:
家长来源:
<!DOCTYPE html>
<html>
<head><title>iframe test page</title></head>
<body>
<h1>Parent window</h1>
<iframe src="//domain2/iframe.html"></iframe>
</body>
</html>
iframe源(在单独的域上):
<!DOCTYPE html>
<html>
<head><title>iframe content</title></head>
<body>
<h1>iframe content</h1>
<script>function redirect() { window.parent.location = "/new-href"; } </script>
<a href="javascript:redirect()">Redirect the parent window please</a>
</body>
</html>
如果在IE8中打开主页面(或IE9设置为在IE8模式或Chrome 23或FF16中运行),单击链接将导致导航到//(iframe域)/ new-href,而在IE9中,它会转到/ /(原始父域)/ new-href
我仍在调查如何解决此问题,如果/我有更多信息,我会更新此信息。
更新:为iframe链接设置target =“_ top”属性可以解决此问题。
更新了iframe源(在单独的域上):
<!DOCTYPE html>
<html>
<head><title>iframe content</title></head>
<body>
<h1>iframe content</h1>
<a href="/new-href" target="_top">Redirect the parent window please</a>
</body>
</html>
点击此更新后的iframe代码中的链接会将父(整个)窗口重定向到IE8和&amp;中的//(iframe域)/ new-href。 IE9(据我所知,也是所有浏览器)。这就是你想要做的,对吧?
e.g。如果你想在iframe中制作所有标签,导致top / main / parent窗口导航到某个地方,而不是导航到某个地方,那么使用这样的东西:
$("iframe a").attr("target", "_top");
答案 3 :(得分:0)
URL中的正斜杠隐式文件夹在Moz中有效。浏览器,但使用资源管理器时,来自同一文件夹的链接不会加正斜杠。 这只是X浏览器语法。 您可能做得更好,。/(使用资源管理器点正斜杠,但正确的方法是在相同文件夹URL的文件名前不加斜杠)。