是否可以在Javascript中打开一个新选项卡,然后监听该选项卡触发事件?
我看到this用于收听某些标签事件,但我可以代替window
,而是定位我打开的特定标签吗?
答案 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', "*");