如何使用jQuery / Javascript将标签/窗口中的事件发送到另一个标签/窗口

时间:2015-01-13 23:54:15

标签: javascript jquery events soundcloud

当另一个声音云窗口或标签正在播放时,soundcloud如何停止当前播放的声音?

我正在寻找一种方法将事件从标签/窗口发送到另一个标签/窗口,而不使用子窗口设计。

我尝试使用自定义Cookie事件,但它不会影响其他标签。

2 个答案:

答案 0 :(得分:7)

Use localStorage

  

您是否知道localStorage会触发事件?更具体地说,只要在另一个浏览上下文中添加,修改或删除项目,它就会触发事件。实际上,这意味着无论何时在任何给定标签中触摸localStorage,所有其他标签都可以通过监听storage对象上的window事件来了解它,如下所示:

window.addEventListener('storage', function(e){
  console.log(event.key, event.newValue);
});
     

每当标签修改localStorage中的内容时,每个其他标签都会触发一个事件。这意味着我们只需在localStorage上设置值即可跨浏览器标签进行通信。

请参阅那篇提供可能对您有用的API的文章作者的local-storage模块:

ls.on(key, fn(value, old, url))
ls.off(key, fn)

答案 1 :(得分:0)

不确定您是否在寻找这个?服务器已发送事件。

http://www.w3schools.com/htmL/html5_serversentevents.asp

<script>
    var source = new EventSource("demo_sse.php");
    source.onmessage = function(event) {
        document.getElementById("result").innerHTML += event.data + "<br>";
    };
</script>

对于任何对老派感兴趣的人,通过孩子/父母访问一个窗口,都有这个例子。在您的父页面中,启动子页面,并保留myWindow引用。这允许您访问子窗口的整个DOM。然后你可以控制child =&gt;父母或父母=&gt;取决于你想控制的东西。

<script>
    var myWindow = window.open("", "MsgWindow", "width=200, height=100");
    // Or if you already have a webpage:
    // var myWindow = window.open("MyWebpage.html", "MsgWindow", "width=200, height=100");

    myWindow.document.write("<script>var test = 10;</s"+ "cript>");
    myWindow.document.write("<p>This window's name is: " + myWindow.name + "</p>");

    alert(myWindow.test); // displays 10, stored in the other window.

    myWindow.close("MsgWindow");
</script>