使用
window.open有4个可选参数:url,窗口name,窗口特征,是否替换历史记录。
当有name时,会寻找并在该标签页打开。name可用于a标签及表单的target
方法返回window对象,
var newWin = window.open(url,'newWin','width=200,height=200',false)
传参
1.get方法,拼接url,通过window.location.search 获取到 ?以后的部分。
2.post方法,通过提交表单将数据提交出去,然鹅js无法获取post请求()
function openPostWindow(url, data, name){
var tempForm = document.createElement("form");
tempForm.id="tempForm1";
tempForm.method = 'post';
tempForm.action = url;
tempForm.target = name;
var hideInput = document.createElement('input');
hideInput.name = 'content';
hideInput.value = data;
tempForm.appendChild(hideInput);
// 本想监听submit事件,然而动态提交的事件是无法触发onsubmit。
window.open('about:blank',name,false)
document.body.appendChild(tempForm);
tempForm.submit();
}
用以上代码可以打开新页面并把数据发送到新页面,然鹅没什么用。
3. postMessage发送消息
var newWin = window.open(url,'newWin','width=200,height=200',false);
// newWin.onload = function(){} 发现不可行,提示跨域
newWin.postMessage('hello!',targetOrigin)
window.addEventListener('message', function (e) {
console.log(e.data);
window.opener.postMessage('hi!',targetOrigin)
}
但是在我的项目中出现了一个很奇怪的问题,newWin接收到msg后需要在body拼接一个iframe,可每次拼接完成,页面好像又重载了。最后延迟发送message才成功。