如何从两个不同的页面引用弹出窗口?

时间:2009-01-22 22:58:45

标签: javascript popup

我需要允许用户点击“page-1.htm”中的链接并打开一个弹出窗口。然后,当用户在主浏览器窗口中浏览“page-2.htm”时,我需要能够引用弹出窗口。

“page-1.htm”中的JavaScript

var playerWin = window.open("player.htm", "playerWin", "width=300,height=130");
playerWin.play("song.mp3");  // play() is a function in player.htm

“page-2.htm”中的JavaScript

playerWin.play("tune.mp3");

page-2.htm中的此代码生成错误“playerWin未定义”。这是可以理解的,因为在页面2.htm上没有定义名为 playerWin 的变量。

我的问题是:我能从第2.htm页引用弹出窗口吗?

5 个答案:

答案 0 :(得分:5)

即使你离开了开启者页面,我也做了一个快速测试,弹出窗口仍然有'开启者'对象,你可以访问它。因此,要么轮询开启者并重置引用,要么在离开页面等待然后重新链接后添加计时器。

1.htm

<script>
var w = window.open("p.htm", "playerWin", "width=300,height=130");
</script>
<a href="2.htm">2</a>

p.htm

<a href="javascript:opener.w=this;">re-link</a>

2.htm

<script>
    var w;
</script>
<a  href="javascript:alert(w);">check</a>

答案 1 :(得分:2)

答案是否定的。大多数浏览器会将窗口和文档从一个导航完全隔离到下一个导航。没有地方可以将引用放在弹出窗口中,当你导航到page2时它将继续存在。

答案 2 :(得分:1)

您需要将page-1.htm放在iframe中(占用整个浏览器窗口)...然后通过第1页的父窗口启动并与弹出窗口通信。

即。 (抱歉伪代码)

user clicks on link in page-1
page-1 asks it's parent window to open a popup
popup opens

user navigates away (in the iframe)
user clicks a link in page-2
page-2 asks it's parent window to close it's popup

只要所有内容都在同一个域中,并且导航保留在iframe中,这应该可以正常工作

答案 3 :(得分:0)

以前没见过......我会假设你这样做是因为你必须以不同方式组织你的网页。

由于您使用的是ASP.NET,因此只需将page-2设置为会话值即可。然后让你的播放器页面运行一个AJAX计时器来检查会话变量,然后执行相应的操作,因为它在弹出窗口上有一个句柄。

答案 4 :(得分:0)

在Firefox 12.0中,接受的答案对我不起作用。我目前正在开发一个项目,在该项目中,应用程序必须始终了解在页面之间导航或刷新当前页面时打开/关闭哪些弹出窗口。每次弹出窗口打开或关闭时,我都会使用JavaScript cookie在客户端上存储信息。不完美,但如果您不需要100%万无一失的东西,这是一个不错的选择。在我看来,在重新加载页面时尝试维护JavaScript变量总是不太可靠,并且尝试在服务器上存储弹出窗口的信息根本就没有意义,除了cookie之外还剩下什么呢?