使用 'window.open' 并与 child window 交流
Use 'window.open' and communicate with a child window
我的 tomcat 服务器中有两个页面。
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button onclick="onBtnClick()">jump to child</button>
<script>
const msg = {
name:'index.html',
ifor:'I am your parent!'
};
function onBtnClick() {
const childWindow = window.open('./child.html');
childWindow.msg = msg
}
</script>
</body>
</html>
child.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="msg-panel"></div>
<script>
const msgPanel = document.querySelector('#msg-panel');
msgPanel.innerHTML = `<span>${msg.name}</span><br><span>${msg.ifor}</span>`
console.log(window.msg);
</script>
</body>
</html>
我想从index.html传递一些消息(index.html中的消息Object)到child.html, 顺便说一下上面的.
当我点击index.html中的按钮打开child.html时,有时我可以得到msg object in child.html,但有时我不能。
因为您有时会收到该消息,有时不会尝试将来自 index.html 的脚本代码放入此:
document.addEventListener("DOMContentLoaded", function(event) {
//your code...
}
我认为你的 html 没有加载,你点击按钮的速度太快了。
制作按钮类型="button"
您设置打开后的消息。有时计算机会更快,并且在消息显示之前不会传递消息。使用超时在 child 或
中显示消息
- 在调用 window.open 或
之前将消息存储在 sessionStorage 中
- 让 child 阅读来自 parent 的消息:
const msgPanel = document.querySelector('#msg-panel');
msgPanel.innerHTML = `<span>${opener.msg.name}</span><br><span>${opener.msg.ifor}</span>`
console.log(window.msg);
虽然这已经解决了。将数据发送到 child 的另一种选择是 localstorage
。获取和设置非常简单,也支持IE11。
localStorage.setItem('msg', 'something important');
let msg = localStorage.getItem('msg');
有了它,您还可以通过在本地存储更改事件上设置事件侦听器来回发送数据,例如
window.addEventListener('storage', function(e) {
//do some cool stuff here
}
以防万一你想在 parent 和 child 之间进行更复杂的交换。
我的 tomcat 服务器中有两个页面。
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button onclick="onBtnClick()">jump to child</button>
<script>
const msg = {
name:'index.html',
ifor:'I am your parent!'
};
function onBtnClick() {
const childWindow = window.open('./child.html');
childWindow.msg = msg
}
</script>
</body>
</html>
child.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="msg-panel"></div>
<script>
const msgPanel = document.querySelector('#msg-panel');
msgPanel.innerHTML = `<span>${msg.name}</span><br><span>${msg.ifor}</span>`
console.log(window.msg);
</script>
</body>
</html>
我想从index.html传递一些消息(index.html中的消息Object)到child.html, 顺便说一下上面的.
当我点击index.html中的按钮打开child.html时,有时我可以得到msg object in child.html,但有时我不能。
因为您有时会收到该消息,有时不会尝试将来自 index.html 的脚本代码放入此:
document.addEventListener("DOMContentLoaded", function(event) {
//your code...
}
我认为你的 html 没有加载,你点击按钮的速度太快了。
制作按钮类型="button"
您设置打开后的消息。有时计算机会更快,并且在消息显示之前不会传递消息。使用超时在 child 或
中显示消息
- 在调用 window.open 或 之前将消息存储在 sessionStorage 中
- 让 child 阅读来自 parent 的消息:
const msgPanel = document.querySelector('#msg-panel');
msgPanel.innerHTML = `<span>${opener.msg.name}</span><br><span>${opener.msg.ifor}</span>`
console.log(window.msg);
虽然这已经解决了。将数据发送到 child 的另一种选择是 localstorage
。获取和设置非常简单,也支持IE11。
localStorage.setItem('msg', 'something important');
let msg = localStorage.getItem('msg');
有了它,您还可以通过在本地存储更改事件上设置事件侦听器来回发送数据,例如
window.addEventListener('storage', function(e) {
//do some cool stuff here
}
以防万一你想在 parent 和 child 之间进行更复杂的交换。