我可以打开一个新窗口并在JavaScript中更改调用窗口的DOM吗?

时间:2012-12-08 22:28:17

标签: javascript dom window.open

首先,我想说我现在已经编程了大约3个月的JavaScript,而且我并不十分关心通过标准或最佳实践来解决这个问题。我主要担心的是学习使用DOM。我不想使用任何jQuery,因为我不熟悉它。

我试图做一个非专业的"登录"使用JavaScript和DOM在我的页面上运行。首先,我正在使用"登录"将显示的屏幕"隐藏"最初然后显示"阻止"在使用时。当我在"登录"后面添加一个黑暗的屏幕时,这很好用,看起来非常好。屏幕添加较少的不透明度(0.1不透明度)到页面的主要部分"登录屏幕"。

当我关闭"登录"这个(不透明度)将恢复正常。屏幕。所以你可以看到使用相同的DOM在同一页面内发生的所有事情。好的,这就是我希望它工作的方式:你创建一个用户名然后你创建一个密码。热潮,完了!

但问题在于:在您创建用户名和密码后,我希望它说“#Hello; Hello(此处为用户名)"登录链接最初的位置。我可以使用DOM并将用户名插入到HTML页面中,但是当我提交作为登录功能的表单时,页面将被重新加载并且对DOM的更改将被删除!

所以现在我可以告诉你我想到的解决方案:使表单(登录页面)在新窗口中,因此当提交表单(并操纵DOM)时,将重新加载新窗口,然后关闭将主页DOM的更改保持不变。唯一的问题是我无法弄清楚如何做到这一点。你可能会说这是一个主要问题哈哈哈。

那么,我可以在新窗口中操作父窗口(即调用窗口)DOM吗?

2 个答案:

答案 0 :(得分:2)

回答你的回答:你可以在新窗口中使用window.opener.document来修改调用者窗口的DOM;

window.opener是对调用者窗口的引用(如果有的话,否则为null),但仅当两个窗口都来自same domain时)。

注意:这是一个小网页还是你要通过javascript对网站/应用程序进行大量的DOM操作?在后一种情况下,您应该使用javascript库/框架(我建议使用jQuery),以便更轻松地完成脏工作。

答案 1 :(得分:0)

弹出窗口可以找到使用opener变量打开它的窗口。

如果弹出窗口和原始窗口都来自同一个域,则弹出窗口确实可以修改原始窗口的HTML。

如果弹出窗口和原始窗口包含来自不同域的内容,则由于浏览器实施的跨域保护,他们无法看到彼此的HTML。