Javascript window.location.state未按预期工作
我有一种情况,我需要将一些json从一个窗口传递到同一域中的新窗口。我有第一个窗口,比如说window1,第二个窗口,比如说window2 我在window1中有以下代码:Javascript window.location.state未按预期工作,javascript,json,windows,internet-explorer-11,Javascript,Json,Windows,Internet Explorer 11,我有一种情况,我需要将一些json从一个窗口传递到同一域中的新窗口。我有第一个窗口,比如说window1,第二个窗口,比如说window2 我在window1中有以下代码: var params = [ 'height=750', 'width=720', 'scrollbars=yes', 'left=0', 'top=0', 'fullscreen=no', // only works in IE, but here for completen
var params = [
'height=750',
'width=720',
'scrollbars=yes',
'left=0',
'top=0',
'fullscreen=no', // only works in IE, but here for completeness
'location=no'
].join(',');
var port = location.port;
var url = "http://" + hostName + ':' + port + "/isecalreport" + location.search;
var newWindow = window.open(url,'photocal_report',params);
while(true){
if(newWindow! == undefined) {
newWindow.location.state={payloadFromIseCalWeekly : payloadFromIseCalWeekly,instrumentIdObj : instrumentIdObj};
break;
}
}
window2中的代码:
var payloadFromIseCalWeekly = location.state.payloadFromIseCalWeekly ? location.state.payloadFromIseCalWeekly : {};
我想使用window.location.state中的json集
所以问题是,它在chrome、mozilla中运行良好,但在IE11中失败(当调试器未打开时)
当我在IE11中打开调试器时,它工作正常
我调试了它,发现在打开新窗口的指令之后,下一条指令运行,但它没有找到新窗口对象。
这很奇怪,因为它在开发人员控制台打开时工作
如果我能深入了解如何解决这个问题,那就太好了
我的目标是打开一个新窗口,我需要向其传递一些数据,并使用这些数据执行API调用。除了少数例外,您不能让一个窗口、选项卡或框架直接与另一个窗口、选项卡或框架对话。这是为了防止其中一个上下文中的恶意脚本跨页面劫持另一个上下文 为了解决这个问题,您有两个选择,您可以使用或只是通过在新窗口中打开的URL传递数据。如果你在同一个领域,技术上有更多的选择,但我建议你不要进入兔子洞 通过URL发送数据是单向的。您可以在URL中发送新窗口可以读取的查询字符串变量,但它不能将任何内容发送回创建它的窗口 另一方面,可用于在多个上下文之间和跨域进行通信。它被认为是安全的,因为它要求所有参与者都在侦听消息,而不允许直接访问代码 您的各个页面可以使用简单的事件侦听器侦听消息
// listen for incoming messages on this page
window.addEventListener('message', function(e) {
// this is the handler function
// do we trust where this was sent from?
if (event.origin !== "http://example.com") {
// if so, print the resulting event object
console.log('message received', e);
}
}, false);
然后,您可以从另一个页面向窗口发送消息
// the * is the targetOrigin, read the docs!
newWindow.postMessage("some message data", "*");
除了少数例外,您不能让一个窗口、选项卡或框架直接与另一个窗口、选项卡或框架对话。这是为了防止其中一个上下文中的恶意脚本跨页面劫持另一个上下文 为了解决这个问题,您有两个选择,您可以使用或只是通过在新窗口中打开的URL传递数据。如果你在同一个领域,技术上有更多的选择,但我建议你不要进入兔子洞 通过URL发送数据是单向的。您可以在URL中发送新窗口可以读取的查询字符串变量,但它不能将任何内容发送回创建它的窗口 另一方面,可用于在多个上下文之间和跨域进行通信。它被认为是安全的,因为它要求所有参与者都在侦听消息,而不允许直接访问代码 您的各个页面可以使用简单的事件侦听器侦听消息
// listen for incoming messages on this page
window.addEventListener('message', function(e) {
// this is the handler function
// do we trust where this was sent from?
if (event.origin !== "http://example.com") {
// if so, print the resulting event object
console.log('message received', e);
}
}, false);
然后,您可以从另一个页面向窗口发送消息
// the * is the targetOrigin, read the docs!
newWindow.postMessage("some message data", "*");
请使用格式化工具正确格式化您的代码。感谢@Soviut我在回答或提问时会记住请使用格式化工具正确格式化您的代码。感谢@Soviut我在回答或提问时会记住hanks@Soviut,我选择了search params方法。我想到了一个问题。现在我正在开发一个单页应用程序,其中只有一个html文件,装载和卸载不断发生。现在,当我打开一个新窗口时,它会打开装载了不同组件的同一个html文件。你认为post message会在那里工作吗?是的,您的SAP可以侦听多种类型的消息。另外,如果你能帮助的话,尽量避免打开新窗口,因为window.open被大多数弹出窗口拦截器阻止。感谢@soviut,我选择了搜索参数方法。我想到了一个问题。现在我正在开发一个单页应用程序,其中只有一个html文件,装载和卸载不断发生。现在,当我打开一个新窗口时,它会打开相同的html文件,其中装载了不同的组件。您认为post消息在那里可以工作吗?是的,您的SAP可以侦听多种类型的消息。另外,如果你能帮助的话,尽量避免打开新窗口,因为window.open被大多数弹出窗口拦截器阻止。