可以实现,同源页面,不同会话下的通信。

GIF 2021-4-26 19-42-33.gif

主页面

  1. <input type="text" name="test" id="input">
  2. <div id="show"></div>
  3. <button id="button">同步</button>
  4. <script src="./index.js"></script>

主线程

  1. const worker = new SharedWorker('/worker.js')
  2. const text = document.getElementById('show')
  3. const button = document.getElementById('button')
  4. worker.port.start()
  5. document.getElementById('input').addEventListener('change', (e) => {
  6. console.log(e.target.value)
  7. worker.port.postMessage({
  8. type: 'push',
  9. value: e.target.value
  10. })
  11. })
  12. button.addEventListener('click', () => {
  13. worker.port.postMessage({
  14. type: 'pull',
  15. })
  16. })
  17. worker.port.addEventListener('message', (e) => {
  18. console.log(e)
  19. text.innerHTML = e.data
  20. })

子线程

  1. console.log(`I'm share worker script`)
  2. let data = null
  3. onconnect = function (e) {
  4. console.log(e)
  5. const port = e.ports[0]
  6. port.onmessage = function(e) {
  7. switch (e.data.type) {
  8. case 'push':
  9. data = e.data.value
  10. break
  11. case 'pull':
  12. port.postMessage(data)
  13. break
  14. default:
  15. break;
  16. }
  17. }
  18. }