【发布时间】: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 方,我无法更改。
【问题讨论】:
标签: javascript jquery iframe cross-browser cross-domain