如何使用javascript或jquery检查命名窗口是否存在
下面是一个场景。我有一个静态音频播放器在一个网站的页脚。如果转到另一页,音频播放器将重新加载。这不是问题,因为它是音频流而不是静态文件。此页脚中还有一个链接,单击该链接将导致整个静态页脚消失,并弹出一个包含音频流的窗口。当然,问题是如果有人重新加载页面或转到另一个页面,页脚将重新加载。弹出窗口的名称与弹出窗口的javascript相同。如果他们离开网站回来,这也是一个问题。我想找出一种方法来对窗口加载运行检查,以查看具有特定名称的窗口是否仍处于打开状态。因此,如果当我点击一个按钮来获取这个弹出窗口时,我也将该窗口命名为“Radio”,那么它将检查是否存在一个名为Radio的窗口。比如:如何使用javascript或jquery检查命名窗口是否存在,javascript,jquery,html,Javascript,Jquery,Html,下面是一个场景。我有一个静态音频播放器在一个网站的页脚。如果转到另一页,音频播放器将重新加载。这不是问题,因为它是音频流而不是静态文件。此页脚中还有一个链接,单击该链接将导致整个静态页脚消失,并弹出一个包含音频流的窗口。当然,问题是如果有人重新加载页面或转到另一个页面,页脚将重新加载。弹出窗口的名称与弹出窗口的javascript相同。如果他们离开网站回来,这也是一个问题。我想找出一种方法来对窗口加载运行检查,以查看具有特定名称的窗口是否仍处于打开状态。因此,如果当我点击一个按钮来获取这个弹出窗
if window.name("Radio).exists then $(".radio").remove();
$(window).load(function() {
if (!$.cookie('playerPop')) {
$('.radio').show;
}
});
$(".lnk1,#xx").click(function() {
$("div").hide("#fixedBar");
$.cookie('playerPop', {
path: '/',
expires: 1
});
});
文档准备好后运行的东西。我只需要一个方法,看看命名的窗口是否打开,然后我就可以从那里开始了。
下面是我在页脚中的jquery:
$(".lnk1,#xx").click(function() {
$("div").remove("#fixedBar")
});
$( document ).ready(function() {
$(".radio2").html('<audio src="http://www.live365.com/play/372874/" type="audio/mpeg" autoplay="autoplay" preload="auto" controls="controls"></audio>');});
到目前为止,这是完美的工作,因为我有另一个模板,处理弹出式音频播放器,它有自己的标题。由于我推断代码的另一个方面是在弹出窗口关闭时更改本地存储的值,并且由于我有两个不同的弹出播放器,它们都使用相同的头文件,所以我将此代码添加到头文件中
window.addEventListener("beforeunload", function (event) {
window.localStorage.radioOut = "0"
});
这是现在在网站上直播,到目前为止,它似乎是完美的工作。
如果有人感兴趣,您可以在这里找到:
杰克和所有帮助过他的人都得到了荣誉 您可以使用启动弹出窗口的单击功能,也可以设置cookie。当用户离开站点,然后返回时,您可以进行检查以查找cookie。如果cookie存在,则隐藏页脚栏,否则显示它 因为您使用的是jQuery,所以cookie插件可以使它更简单 可能是这样的:
if window.name("Radio).exists then $(".radio").remove();
$(window).load(function() {
if (!$.cookie('playerPop')) {
$('.radio').show;
}
});
$(".lnk1,#xx").click(function() {
$("div").hide("#fixedBar");
$.cookie('playerPop', {
path: '/',
expires: 1
});
});
您可以使用类似这样的技术来检测弹出窗口的关闭:
关闭弹出窗口不仅会删除cookie,而且如果您通过再次显示页脚栏“将播放器弹出回页面”也会很酷。听起来您只是想跟踪打开的弹出窗口的状态。我只想使用localStorage,因为我认为您无法做到您所说的 当弹出窗口打开时,执行以下操作:
window.localStorage.radioOut = "1"
在弹出窗口中:
window.addEventListener("beforeunload", function (event) {
window.localStorage.radioOut = "0"
});
然后在您的页面上只需执行以下操作:
if (window.localStorage.radioOut === "1") {
$(".radio").remove();
}
由于
storage
事件在同一域中的所有选项卡上触发(设置值的选项卡上除外),因此它们可用于轮询其他选项卡
在弹出选项卡上侦听马可存储事件,并在事件发生时触发波罗事件:
addEventListener("storage", function(e){
if(e.key=='marco') localStorage.polo = e.newValue;
});
在主页上,触发一个新的马可存储事件,并收听polo事件:
addEventListener("storage", function(e){
if(e.key=='polo' && e.newValue == localStorage.marco){
$(".radio").remove();
}
});
localStorage.marco=Math.random();
这适用于所有选项卡、iFrame和弹出窗口(一次),因此它比只查找弹出窗口更灵活。使用localStorage或sharedWorkers在相同的域选项卡之间进行对话,而无需对象引用。我猜您是在谈论较新的HTML5存储选项。这对我来说是一件新鲜事,我不确定如何利用它来完成我正在尝试做的事情。到目前为止,我已经在我的测试站点上完成了这项工作。还有一些其他复杂的建设我没有进入,所以我仍然有一些工作要做,但到目前为止,杰克,你摇滚。。。咧嘴笑谢谢我会更新我的问题,一旦我的一切工作完全达到我的满意。非常好的答案。我已经贴出了我自己的答案,但直到我读了你的答案,我才意识到我误解了这个问题。这个答案比OP中的解释更能说明问题所在。
addEventListener("storage", function(e){
if(e.key=='polo' && e.newValue == localStorage.marco){
$(".radio").remove();
}
});
localStorage.marco=Math.random();