在javascript中将单击事件从一个页面转移到另一个页面

在javascript中将单击事件从一个页面转移到另一个页面,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我正在尝试使用javascript将单击事件从一个页面转移到另一个页面。我在a页上有一个带有点击事件的div,这就是div HTML: <div class="play">Play Sound</div> <div class="pause">Stop Sound</div> $(document).ready(function() { var audioElement = document.createElement('audio');

我正在尝试使用javascript将单击事件从一个页面转移到另一个页面。我在a页上有一个带有点击事件的div,这就是div

HTML:

<div class="play">Play Sound</div>
<div class="pause">Stop Sound</div>
$(document).ready(function() {
   var audioElement = document.createElement('audio');
       audioElement.setAttribute('src', 'audio.mp3');
       audioElement.setAttribute('autoplay', 'autoplay');
       // audioElement.load()

   $.get();

   audioElement.addEventListener("load", function() {
       audioElement.play();
   }, true);

   $('.play').click(function() {
       audioElement.play();
   });

   $('.pause').click(function() {
      audioElement.pause();
   });
});

您可以使用套接字或本地存储。本地存储在其他选项卡进行更改时触发事件。选中此答案

要使用JavaScript将单击事件从一个页面转移到另一个页面,您可以使用共享工作程序(在我的答案中使用)或服务工作程序。共享工作程序是在后台运行的程序,可以与不同的页面进行通信。它在页面之间共享

使用共享工作人员的要求如下:;它必须通过安全连接(https或localhost)提供服务,并且目标浏览器必须支持共享工作API

解决您的问题的示例:

a、 html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Page A</title>
  </head>
  <body>
    <h1>Page A with controls</h1>

    <button id="play">Play Sound</button>
    <button id="pause">Stop Sound</button>
    <a href="b.html" target="_blank">Open page B</a>

  </body>
  <script src="a.js"></script>
</html>
b、 html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Page B</title>
  </head>
  <body>
    <h1>Page B with audio element</h1>

  </body>

  <script src="b.js"></script>
</html>
sharedworker.js

//sharedworker.js
/*assuming we open page  a first, page b second*/
const A = "A";
const B = "B";

let portA;
let portB;
self.addEventListener("connect", function(connectEvent) {

    const port = connectEvent.ports[0];
    port.addEventListener("message", function(event) {
        const data = event.data;
        if (data.start) {
            if (data.from === A) {
                portA = port;
            } else {
                portB = port;
            }
        } else {
            console.log(data);
            portB.postMessage(data);//relay message
        }
        console.log(`Shared worker memory report
portA, portB: ${portA}, ${portB}`);
    });

   port.start();

}, false);
此处未提供,但需要尝试以下示例:一个服务静态文件的服务器程序,audio.mp3


另请参见和

这怎么可能起作用?单击某个div是否会将用户导航到第B页?或者你希望两个页面同时打开并互相交谈?是的。假设两个页面同时打开,并且可以互相交谈不,不可能是你问的方式。HTML是无状态的,客户端。因此,如果不使用Cookie或服务器上的数据库,一个页面就不知道另一个页面。很好,我可以使用Cookie来实现这一点吗。是的,您可以使用cookies在页面之间传递数据,但它不是异步的。也就是说,要播放音频的第二个页面在重新加载之前不知道cookie是否被更改。
(function () {
    const ME = "B";
    if (!window.SharedWorker) {
        console.log("window.SharedWorker not available");
        return;
    }

    const audioElement = document.createElement('audio');
    audioElement.setAttribute('src', 'audio.mp3');
    audioElement.setAttribute('autoplay', 'autoplay');
    // audioElement.load()
    document.body.appendChild(audioElement); // useful ?


    audioElement.addEventListener("load", function() {
        audioElement.play();
    }, true);


    const sharedWorker = new SharedWorker("sharedworker.js", "audio");
    sharedWorker.port.onmessage = function(event) {
        const messageObject = event.data
        console.log("received", messageObject);
        if (messageObject.hasOwnProperty("play")) {
            if (messageObject.play) {
                audioElement.play();
            } else {
                audioElement.pause();
            }
        }
    };

    sharedWorker.port.start();

    sharedWorker.port.postMessage({
        from: ME,
        start: true
    });
}());
//sharedworker.js
/*assuming we open page  a first, page b second*/
const A = "A";
const B = "B";

let portA;
let portB;
self.addEventListener("connect", function(connectEvent) {

    const port = connectEvent.ports[0];
    port.addEventListener("message", function(event) {
        const data = event.data;
        if (data.start) {
            if (data.from === A) {
                portA = port;
            } else {
                portB = port;
            }
        } else {
            console.log(data);
            portB.postMessage(data);//relay message
        }
        console.log(`Shared worker memory report
portA, portB: ${portA}, ${portB}`);
    });

   port.start();

}, false);