我用两个页面做了一些跨域JS的事情:http://app.domain.dev
(主窗口)和http://framed.p.domain.dev
(在框架中)。在两个页面document.domain='domain.dev'
都在任何操作之前执行。
第二页(框架)有一个组合框,其JS功能与其“改变”相关联。在onChange='cbChanged(this)'
HTML标记上使用select
的事件。该函数如下所示:
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
相对于子域更改,我希望它可以在所有现代浏览器中使用。
子框架的内容是第三方,我无法更改。
答案 0 :(得分:0)
您可以使用: var iframe = document.getElemntById(“someid”); iframe.contentWindow.location.href = “someurl”;