在同一浏览器的选项卡/窗口之间进行Javascript通信的最可靠方法是什么?例如,当Tab 2开始音频播放时,Tab 1以某种方式知道这一点并且可以暂停它的播放器.
我正在建立一个带有音乐播放器的网站...所以,如果你打开两个标签到网站,你可以在两者上开始播放音乐.这显然很糟糕,所以我试图找到一个解决方案.
有任何想法吗?谢谢
我在我的网站中有一些值,我希望在浏览器关闭时清除,我选择sessionStorage来存储该值,当选项卡关闭时清除它并在用户按f5时保持存储,但如果用户在不同的选项卡中打开一些链接这个值不可用.我如何在我的应用程序之间共享所有浏览器选项卡之间的sessionStorage值?
用例:将值放在某个存储中,在所有浏览器选项卡中保持该值可访问,如果所有选项卡都关闭则清除它.
if (!sessionStorage.getItem(key)) {
sessionStorage.setItem(key, defaultValue)
}
Run Code Online (Sandbox Code Playgroud) 我有两个窗口:窗口A和窗口B.
问题:
我知道这样做的两种方式:
但这两种方式并不那么优雅.
例如,获得窗口B的引用并使用window.postMessage()(HTML5)会很不错
最终的目标是制作像facebook这样的东西,如果你打开4个Facebook标签并在一个标签中聊天,聊天是最新的每个Facebook标签,这是整洁的!
我创建了一个登录页面,其中包含许多其他页面,其中包含用于检查会话的代码.如果用户没有会话,则所有页面都将重新加载并重定向到注销页面.此脚本每三秒调用一次.
我写的代码工作正常,但我想以另一种方式实现它.当用户注销时,所有打开的选项卡都会重新加载/刷新,从而导致用户注销.那可能吗?
sessioncheck.php:
<?php
session_start();
if(isset($_SESSION['username']) && $_SESSION['username'] != ''){
echo "true";
}
else {
echo "false";
}
?>
Run Code Online (Sandbox Code Playgroud)
此代码位于每个页脚中:
<script>
function gettatus(){
$.get("sessioncheck.php", function(data){
if(!data) {
window.location = "logout.php";
}
setTimeout(function(){
checkLoginStatus();
}, 3000);
});
}
$(document).ready(function(){
gettatus();
});
</script>
Run Code Online (Sandbox Code Playgroud) 我听说HTML5有window.postMessage(),但似乎需要在窗口(或选项卡,整个问题)上有一个句柄,你要发布消息.如果我要向所有打开的窗口广播怎么办?这可能吗?
(我想要做的就是警告其他的窗口,没有任何服务器往返当用户做一些事情在影响别人一个窗口,使他们能够更新他们的内容.然而,虽然一些窗口可能从现有的开放--allowing我拦截和存储引用他们 - 一些新鲜的窗口可以由用户手动打开,然后选择书签或URL输入在这种情况下,似乎没有被拦截的方式和存储引用.)
我正在开发一个网站,用户可以在此网站上更改必须确认的设置才能生效.
确认是通过我通过电子邮件发送的链接完成的.在网站的HTML中我使用这个小片段:
<script type="text/javascript">window.name="mysite";</script>
Run Code Online (Sandbox Code Playgroud)
在我使用的HTML电子邮件中
<a href="..." target="mysite">Click me</a>
Run Code Online (Sandbox Code Playgroud)
但Chrome总是打开新标签,而不是一次性打开它们.
这是偶数还是由于某些原因被禁止?
如何知道或检查两个浏览器选项卡是否已打开,如果这些选项卡是打开的,用户将收到一个警告框或消息框,说"网址已经打开",类似于纯/原生JavaScript?此浏览器选项卡包含一个外部网站,我没有任何权限来操纵或更改它.谢谢
示例网址
yahoo.com and google.com
Run Code Online (Sandbox Code Playgroud)
如果已经打开yahoo.com和google.com的标签,我想提醒用户
我想使用tabCreate打开这样的URL:
tabCreate("http://maps.google.com/", "tabMapsPermanentAddress");
mean to open a new tab, it is use in creating chrome extension
Run Code Online (Sandbox Code Playgroud) 我希望我的HTML5应用程序能够绘制到两个不同的屏幕上.这(我认为)意味着我需要两个不同的浏览器窗口,每个屏幕一个.这可能吗?看来我真的必须将同一个应用程序加载到两个窗口中,并且不知何故让窗口相互通信.我找不到如何实现这一目标的例子.我怎样才能实现呢?
为了更加精彩:可能没有涉及服务器,只是从文件系统本地提供的应用程序.
如何在多个浏览器选项卡之间共享单个 WebSocket 连接?
我知道有多个建议 SharedWorker 的问题/帖子。然而,由于 SharedWorker 的采用率很低(根据Can I use在撰写本文时的数据,全球范围内只有 35%),这并不是一个可行的解决方案,更不用说它已经在 Safari 中被删除了。
我已经使用 SerivceWorker 实现了一个工作版本,它具有一些 SharedWorker 的功能,可以跨选项卡共享单个连接。不幸的是,在测试过程中,我意识到 ServiceWorker 可以被浏览器杀死/停止,特别是当开发工具未打开时。我还知道一些解决方法可以防止这种行为,例如定期 ping ServiceWorker。我想请问是否有适当的方法来处理这个问题。
javascript ×9
html ×2
html5 ×2
ajax ×1
browser ×1
browser-tab ×1
external ×1
hyperlink ×1
jquery ×1
php ×1
postmessage ×1
target ×1
websocket ×1