jquery 防止在多个浏览器选项卡上打开html文件

23c0lvtd  于 2023-01-04  发布在  jQuery
关注(0)|答案(3)|浏览(152)

我有一个html文件。我不想在一个浏览器中打开该文件太多次。如果在浏览器中我已经打开了该html文件。那么当打开另一个带有相同的htm文件的选项卡时,将出现错误。有什么方法可以做到这一点吗?。我们可以使用javascript,html,jquery或任何其他方法。

1wnzp6jl

1wnzp6jl1#

我能看到的唯一可靠的方法是在BroadcastChannel上听到一条询问“我在这里吗?”的消息,然后回答“我在这里"。在页面加载时,问“我在这里吗?”如果你得到肯定的回答,你就知道另一个标签已经拥有了你的页面。

const bc = new BroadcastChannel("Tin huynh's Broadcast Channel");
const question = "Am I here?"
const answer = "I am here."
bc.onmessage = evt => {
  if (evt.data === question) {
    bc.postMessage(answer)
  } else if (evt.data === answer) {
    alert("I am already here.")
  }
}
bc.postMessage(question)
5ssjco0h

5ssjco0h2#

您可以将打开的选项卡数量存储在localStorage中,然后在选项卡关闭时递减该值:

const open = +localStorage.getItem('open') || 0

if(open > 0) document.write('Tab already opened')
localStorage.setItem("open", open + 1)

window.addEventListener('unload', () => {
    localStorage.setItem('open', (+localStorage.getItem('open') - 1 || 0))
})

see it in action

0qx6xfy6

0qx6xfy63#

在新选项卡中打开HTML文件之前,可以使用JavaScript检查该文件是否已在浏览器中打开。

function openHTMLFile() {
  var isFileOpen = false;
  for (var i = 0; i < window.length; i++) {
    if (window[i].location.href == "https://yoursite/path/to/file.html") {
      isFileOpen = true;
      break;
    }
  }

  if (!isFileOpen) {
    window.open("https://yoursite/path/to/file.html", "_blank");
  }
}

相关问题