打开新选项卡,然后侦听被触发的事件

时间:2014-07-11 12:45:53

标签: javascript

是否可以在Javascript中打开一个新选项卡,然后监听该选项卡触发事件?

我看到this用于收听某些标签事件,但我可以代替window,而是定位我打开的特定标签吗?

3 个答案:

答案 0 :(得分:1)

不,你不能。好吧,不是直接的。

出于明显的安全原因,javascript只能从其自己的标签/窗口访问数据。但是,您可以使用cookie,locastorage或...来存储和读取来自同一域的数据。

您可以将EventListner添加到localstorage对象(在域之间共享)。例如,Soundcloud就是这样做的。

编辑:我认为window.open和新标签之间存在混淆。

window.open打开一个弹出窗口。然后,您可以从your script内访问该弹出窗口。但请注意,弹出窗口的显示方式因浏览器而异。有些人在新标签页中打开它,有些在新窗口中打开,...但是请注意,为了能够访问弹出窗口,它必须是相同的域,协议,端口,...

但是,如果用户手动向您的网站打开新窗口/标签,因为您没有对其进行引用,则此功能无效。

答案 1 :(得分:0)

这似乎很适合我

在父窗口中

var form = window.open('/formsv2/add', '_blank', 'resizable=1', true);
form.addEventListener('formAdded', function(data) {
    console.log('formAddedEvent');
    console.log(data.name);
    console.log(data.id);
    $('#formIdSelect').append('<option value="'+data.id+'">'+data.name+'</option>').val(data.id);
});

在弹出窗口中

var evt = document.createEvent("Events")
evt.initEvent('formAdded', true, true); //true for can bubble, true for cancelable
evt.name = $('#title').val();
evt.id = data.form;
document.dispatchEvent(evt);

答案 2 :(得分:0)

以下解决方案对我有用:

父窗口

 var win = window;
 win.open('url', 'newWindow', 'height=300,width=300');

 win.addEventListener('message', function(response){
    console.log(response.data);
},false);

子窗口

window.opener.postMessage('Success', "*");