6

我需要允许用户单击“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 未定义”。这是可以理解的,因为在 page-2.htm 上没有定义名为playerWin的变量。

我的问题是:我可以从 page-2.htm 引用弹出窗口吗?

4

5 回答 5

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>
于 2009-01-22T23:42:26.330 回答
3

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

于 2009-01-22T23:08:16.273 回答
1

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

IE。(抱歉伪代码)

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 内,这应该可以工作

于 2009-01-22T23:46:20.597 回答
1

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

于 2012-05-08T14:44:34.693 回答
0

以前没见过……我假设您正在这样做,因为您必须也不能选择以不同的方式组织您的页面。

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

于 2009-01-22T23:07:09.520 回答