window.parent.location.href IE9 Bug?
场景:
domain1.com 托管domain2.com 的iFrame。
domain2.com正在使用javascript来触发需要的动态链接 路由到父窗口。
链接都是相对路径。
单击/linkA.html(在domain2.com 上的iframe 中)将父级路由到 域名1.com/linkA.html。
var _generic = "/linkA.html";
$("#canvas").each( 函数 () { $(this).children("a").attr("href",_generic); $(this).click( 函数(e) { e.preventDefault(); window.parent.location.href = _generic; } ); } );
将链接更改为绝对链接 (domain2.com/linkA.html) 可以解决功能问题。
以前有人遇到过这个吗?
Scenario:
domain1.com hosts an iFrame of domain2.com.
domain2.com is using javascript to trigger dynamic links that need
to route to the parent window.The links are all relative paths.
Clicking on /linkA.html (in iframe on domain2.com) routes the parent to
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; } ); } );
Changing the links to absolute (domain2.com/linkA.html) solves the functional problem.
Has anyone run into this before?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
为了让浏览器在设置相对路径时解析整个url,它首先需要读取当前的href,而这被SOP阻止了。
但我非常确定,如果您使用
parent.location
而不是parent.location.href
,那么这将工作得很好。In order for the browser to resolve the entire url when setting relative paths, it first needs to read the current href, and this is blocked by the SOP.
But I am pretty sure that if you use
parent.location
instead ofparent.location.href
, then this will work just fine.您应该尝试使用
window.opener.location
而不是window.parent.location
。You should try using
window.opener.location
instead ofwindow.parent.location
.我发现 IE9 与 IE8、FireFox 和 Webkit 之间存在差异。考虑以下代码:
父源:
iframe 源(在单独的域上):
如果在 IE8(或设置为在 IE8 模式或 Chrome 23 或 FF16 下运行的 IE9)中打开主页,则单击链接会导航到 //(iframe域)/new-href 而在 IE9 中它会转到 //(原始父域)/new-href
我仍在研究如何解决此问题,并且如果/当我有更多信息时将更新此内容。
更新:为 iframe 链接设置 target="_top" 属性可以解决此问题。
更新的 iframe 源(在单独的域上):
单击此更新的 iframe 代码中的链接将重定向父(整个)窗口IE8 和 //(iframe 域)/new-href IE9(据我所知,还有所有浏览器)。这就是你想做的,对吧?
例如,如果您想让 iframe 中的所有标签导致顶部/主/父窗口导航到某处,而不是 iframe 导航到某处,那么请使用如下内容:
另请参阅 目标属性文档
I have seen a difference in IE9 vs. IE8, FireFox, and Webkit. Consider the following code:
Parent source:
iframe source (on separate domain):
If the main page is opened in IE8 (or IE9 set to run in IE8 mode or Chrome 23 or FF16) clicking the link results in navigating to //(iframe domain)/new-href whereas in IE9 it goes to //(original parent domain)/new-href
I am still investigating how to work around this issue and will update this if/when I have more information.
UPDATE: Setting the target="_top" attribute for iframe links works around this problem.
Updated iframe source (on separate domain):
Clicking the link in this updated iframe code will redirect the parent (entire) window to //(iframe domain)/new-href in both IE8 & IE9 (and, as far as I know, all browsers as well). That is what you want to do, right?
e.g. If you want to make all tags in an iframe cause the top/main/parent window to navigate somewhere rather than the iframe navigating somewhere then use something like this:
See also target attribute documentation
URL 中的正斜杠隐式文件夹在 Moz 中有效。浏览器,但使用资源管理器,来自同一文件夹的链接不会添加正斜杠。
这只是 X 浏览器语法。
您可能做得更好,放置 ./(使用资源管理器点正斜杠,但正确的方法是在同一文件夹 URL 的文件名前面不加斜杠)。
The forward slash implicit folder in the URL works in Moz. browsers, but with explorer, links from the same folder don not put the forward slash.
It's simply X-browser syntax.
You may have done better puting ./ (dot forward slash with explorer but the proper way is no slash preceding the filename for a same folder URL).