这里的问题相当简单。我想创建一个具有属性的JS对象,比如name。我想创建该对象,并能够在整个页面中使用它。例如,我现在所做的不起作用:
var item = new Object();
function makeItem(title) {
item.name = title;
}
在模态对话框中:
makeItem("test");
alert(item.name); // returns "test"
然而,关闭对话框后,与item
相关的所有信息都消失了。例如,我无法继续查看item.name
下次尝试创建相同对话框时是否包含任何内容。
document.ready()中目前没有任何内容。
显然,我并没有完全理解DOM的想法。 S | O,你介意启发我可怜的大脑吗?
谢谢!
答案 0 :(得分:2)
正如乔恩所说,更多细节和代码有助于了解你的情况。
从你的症状虽然我猜你有一个dialog.html页面,脚本试图“makeItem”,每当你打开一个框架甚至单独的浏览器窗口/标签时,这个dialog.html被加载对话”。
在浏览器中,所有JavaScript对象和代码都“属于”其中一个打开的“页面”。页面可以作为浏览器选项卡或单独窗口中的顶级页面打开,也可以在框架中打开(在这种情况下,它似乎是其父页面的一部分,但其JS仍然与父页面分离)。 / p>
每个打开的页面都有自己的“全局对象”,通常称为window
。您在< script>中在顶层定义的全局函数和变量作为此全局对象的属性附加。
当你打开同一页两次(同时 - 在两个标签中并排打开 - 或在打开第二个副本之前关闭第一个)时,每个副本都有自己的全局对象,完全独立的代码和对象。
通常,当页面关闭时,该页面的全局对象及其所有属性(包括任何对象和函数)都将被销毁。
这就是为什么当您关闭并重新打开对话框时,示例中的item
会丢失其属性(假设我的初始猜测是正确的)。
正确解决问题取决于你想要达到的目标。
如果您需要从开启者页面与打开的对话框进行通信并返回,您可以保存window.open()
电话的参考:
var w = window.open(...dialog URL...);
加载对话框后,w
将指向对话框的全局对象,您将能够戳它。同样,在对话框中,您可以通过window.opener
访问打开对话框的页面的全局对象。
因此,您可以在开启者的上下文中创建item
,方法是在对话框的< script>中添加以下内容:
opener.item = {title: "test"};
...它会和开启者页面一样长。
如果您需要真正的持久性(例如,跨浏览器重启),您最近的唯一选择是cookie或服务器端存储。在现代浏览器中,您可以使用Web存储(localStorage
,sessionStorage
对象)。