尝试将对象从一个页面传递到另一个页面时,window.opener为null

时间:2015-06-27 12:00:04

标签: javascript jquery window.open window.opener window.parent

对此几乎没有类似的问题,但在我的案例中没有一个解决方案有效。 我对此非常陌生,所以这个问题也可能是我遗漏的一个基本问题。

如果发生了点击,我试图用点击的对象打开一个新标签, 所以现在我只想在新标签中提醒它。

父窗口代码:

$(document).on("click", ".button", function(){

    var toSend = $(this);

    var newTab = window.open("test.html", "_blank");

    newTab.myData = toSend; // this one was a solution for a similar problem, 
                            // didn't work for me.
});

这是打开的窗口:

$(document).ready(function() {

    console.log(window.parent.toSend);

    console.log(window.parent.myData);

    console.log(myData);

    console.log(window.opener.toSend);


});

前2个日志返回“undefined”,第三个是抛出未定义myData的异常(Uncaught ReferenceError:myData未定义)。 对于后一个日志,我得到“Uncaught SecurityError:Blocked a origin with origin”null“访问一个原始”null“的帧。协议,域和端口必须匹配。”

非常感谢帮助,谢谢!

edit:console.log(toSend)会记录正确的对象,并已定义。

1 个答案:

答案 0 :(得分:1)

在您的代码中,toSend是函数内的本地变量。要在window对象上访问,它必须是全局变量。从函数中创建全局变量的一种方法是在window上分配属性。所以:

$(document).on("click", ".button", function(){

    window.toSend = $(this);

    var newTab = window.open("test.html", "_blank");
});

然后

$(document).ready(function() {

    console.log(window.opener.toSend);

});

也就是说,最好避免使用全局变量,因此如果必须使用多条信息进行此操作,请使用引用对象的单个全局变量(使用不太可能冲突的名称)与事物),并将该对象的各条信息作为属性。