当前位置: 首页 > 面试题库 >

浏览器标签/窗口之间的Javascript通信

令狐钧
2023-03-14
问题内容

在同一浏览器的选项卡/窗口之间进行JavaScript通信的最可靠方法是什么?例如,当选项卡2开始播放音频时,选项卡1以某种方式知道这一点并可以暂停其播放器。

我正在建立一个带有音乐播放器的网站…因此,如果您现在打开该网站的两个标签,则可以同时在两者上播放音乐。这显然是不好的,所以我正在尝试寻找解决方案。

有任何想法吗?谢谢


问题答案:

这是一个旧的答案,我建议使用此处描述的现代版本:

Javascript;具有相同来源的选项卡/窗口之间的通信

您可以使用Cookie在浏览器窗口之间(以及选项卡之间)进行通信。

这是发送方和接收方的示例

sender.html

<h1>Sender</h1>

<p>Type into the text box below and watch the text 
   appear automatically in the receiver.</p>

<form name="sender">
<input type="text" name="message" size="30" value="">
<input type="reset" value="Clean">
</form>

<script type="text/javascript"><!--
function setCookie(value) {
    document.cookie = "cookie-msg-test=" + value + "; path=/";
    return true;
}
function updateMessage() {
    var t = document.forms['sender'].elements['message'];
    setCookie(t.value);
    setTimeout(updateMessage, 100);
}
updateMessage();
//--></script>

receiver.html:

<h1>Receiver</h1>

<p>Watch the text appear in the text box below as you type it in the sender.</p>

<form name="receiver">
<input type="text" name="message" size="30" value="" readonly disabled>
</form>

<script type="text/javascript"><!--
function getCookie() {
    var cname = "cookie-msg-test=";
    var ca = document.cookie.split(';');
    for (var i=0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(cname) == 0) {
            return c.substring(cname.length, c.length);
        }
    }
    return null;
}
function updateMessage() {
    var text = getCookie();
    document.forms['receiver'].elements['message'].value = text;
    setTimeout(updateMessage, 100);
}
updateMessage();
//--></script>


 类似资料:
  • 问题内容: 我正在寻找一种方法,以在浏览器中的多个选项卡或窗口之间进行通信(在同一个域中,而不是在CORS上)而不会留下痕迹。有几种解决方案: using window object postMessage cookies localStorage 第一个可能是最糟糕的解决方案-您需要从当前窗口中打开一个窗口,然后您只能在保持窗口打开状态下进行通信。如果您在任何窗口中重新加载页面,则很可能失去了通

  • 问题内容: 我正在寻找一种方法,以在浏览器中的多个选项卡或窗口之间进行通信(在同一个域中,而不是在CORS上)而不会留下痕迹。 第一个可能是最糟糕的解决方案-您需要从当前窗口中打开一个窗口,然后您只能在保持窗口打开状态下进行通信。如果您在任何窗口中重新加载页面,则很可能失去了通信。 使用postMessage的第二种方法可能启用了跨域通信,但是遇到了与第一种方法相同的问题。您需要维护一个窗口对象。

  • 问题内容: 我的网站上有一些值,要在关闭浏览器时清除这些值。我选择存储这些值。当选项卡关闭时,它们确实被清除,并且如果用户按下f5则保留;但是,如果用户在其他选项卡中打开某些链接,则这些值不可用。 如何在应用程序的所有浏览器选项卡之间共享值? 用例:将值存储在某个存储器中,使该值可在所有浏览器选项卡中访问,并在所有选项卡都关闭时清除它。 问题答案: 您可以使用localStorage及其“存储”

  • 用例:将一个值放入某个存储区,在所有浏览器选项卡中保持该值可访问,并在所有选项卡关闭时清除该值。

  • 本文向大家介绍如何实现浏览器内多个标签页之间的通信?相关面试题,主要包含被问及如何实现浏览器内多个标签页之间的通信?时的应答技巧和注意事项,需要的朋友参考一下 通过WebSocket或SharedWorker把客户端和服务器端建立socket连接,从而实现通信;也可以调用localstorge、cookies等本地存储方法  

  • 问题内容: 我正在开发一个单页jQuery&Backbone.js Web应用程序。后端是JBoss 6应用服务器。 到目前为止,我们具有以下结构: 只有一个servlet(前端控制器)。来自JavaScript客户端的每个请求都会通过此处。 在servlet中-在某个JS客户端的第一个请求下-我看一下有状态会话bean。对于此客户端的下一个请求,我将查找结果存储在HTTP会话容器中。因此,每个J