如何将子框架中的 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 更改为相对路径?的主要内容,如果未能解决你的问题,请参考以下文章

在 Firefox 中更改 window.location.href 而不关闭 websockets

使用了框架iframe的页面如何跳出框架

在选择选项更改时将子组件中的道具传递给父组件

如何将子函数的参数传递给父 reactjs

如何将子层与 UIView 一起移动?

JavaScript中的window.location.href和window.open()方法