窗口对象没有创建它的页面附加的属性
问题描述:
我使用window.open(url, target)
在新标签页/窗口中打开url
。在这之前,我在新打开的窗口对象上设置了一些属性,目的是将数据从这个页面(新窗口的创建者)传递到新创建的窗口。窗口对象没有创建它的页面附加的属性
在除Internet Explorer之外的所有浏览器中,代码都能正常工作。新创建的页面能够读取表示其窗口的全局window
对象的属性。
但是,只有在Internet Explorer 11中,新创建的窗口中的window
对象没有上一页传入的属性。
下面是演示问题的示例代码。
Page1.html
<script type="text/javascript">
function openNewPage(value1, value2)
{
var newWindow = window.open('Page2.html', '_blank')
newWindow.property1 = value1;
newWindow.property2 = value2;
}
</script>
Page2.html
<body onload = "bodyLoadHandler()">
<script type="text/javascript">
function bodyLoadHandler() {
// Both of these returned undefined
// whether referenced explicitly
// as window.property1 or as
// this.property1. I prefer the explicit
// window.property1 way because of the screwed up
// this pointer and its ensuing issues in JavaScript.
// This happens only
// in IE. The code runs fine in other browsers.
var property1 = window.property1;
var property2 = window.property2;
}
</script>
</body>
答
使用window.opener
,SharedWorker
与postMessage
或storage
事件
Page1.html
<script>
function openNewPage(value1, value2) {
var newWindow = window.open('Page2.html', '_blank')
this.property1 = value1;
this.property2 = value2;
}
openNewPage(1, 2)
</script>
Page2.html
<body onload="bodyLoadHandler()">
<script type="text/javascript">
function bodyLoadHandler() {
var property1 = window.opener.property1;
var property2 = window.opener.property2;
console.log(property1, property2);
}
</script>
</body>
plnkr http://plnkr.co/edit/Gy5FFhvobFoBAbc8UnBY?p=preview
又见How can I load a shared web worker with a user-script?,Can the mechanism that loads the worker in Shared Web Workers be modified?
相关:https://stackoverflow.com/questions/2614520/call-a-javascript-功能跨浏览器选项卡 – Ivar
没有要测试的IE,当您等待'newWindow.onload'事件或者即使您等待2秒钟时也会发生同样的情况吗?你能够从主窗口访问'newWindow'的属性吗? – Kaiido