如何将子框架中的 location.href 更改为相对路径?
Posted
技术标签:
【中文标题】如何将子框架中的 location.href 更改为相对路径?【英文标题】:How can I change location.href in child frame to relative path? 【发布时间】:2015-08-05 10:32:18 【问题描述】:我正在用两个页面做一些跨域的 JS 事情:http://app.domain.dev
(主窗口)和http://framed.p.domain.dev
(在框架中)。在两个页面上,document.domain='domain.dev'
在任何操作之前都会执行。
第二页(加框)有一个组合框,其中 JS 函数通过在select
html 标记上使用 onChange='cbChanged(this)'
绑定到其“更改”事件。函数如下所示:
function cbChanged(param)
location.href = '/some/url?cbchanged'
当我手动更改组合框值时,位置成功更改为http://framed.p.domain.dev/some/url?cbchanged
。
但是当我尝试从父窗口的 javascript 发送更改事件时,位置会随着父域的基础发生变化:http://app.domain.dev/some/url?cbchanged
。问题出现在 Firefox 和 OS X Safari 中,但在 Chrome 中一切正常。
我用来发送更改事件的父页面代码:
var frame = $('frame');
var combobox = frame.contents().find('.cb')[0];
var cw = frame.contentWindow;
cw.setTimeout(function()
cw.triggerEvent(combobox, 'change');
, 0);
这是来自子框架的triggerEvent
函数:
function triggerEvent(element, type)
jQuery(element).trigger(type);
所以,我需要从父窗口以编程方式触发更改事件。我希望location.href
相对于子域进行更改,并且我希望它可以在所有现代浏览器中工作。
子框架的内容是第 3 方,我无法更改。
【问题讨论】:
【参考方案1】:您可以使用: var iframe=document.getElemntById("someid"); iframe.contentWindow.location.href="someurl";
【讨论】:
我再次阅读了您的问题。您永远无法访问第 3 方 iframe 内容。 看,我注意到我在两个页面上都执行了document.domain='domain.dev'
。设置这个域是我唯一能用 3pty 页面做的事以上是关于如何将子框架中的 location.href 更改为相对路径?的主要内容,如果未能解决你的问题,请参考以下文章