如何知道浏览器选项卡是否已使用Javascript打开?

Use*_*019 14 javascript external browser-tab external-links

如何知道或检查两个浏览器选项卡是否已打开,如果这些选项卡是打开的,用户将收到一个警告框或消息框,说"网址已经打开",类似于纯/原生JavaScript?此浏览器选项卡包含一个外部网站,我没有任何权限来操纵或更改它.谢谢

示例网址

yahoo.com and google.com
Run Code Online (Sandbox Code Playgroud)

如果已经打开yahoo.com和google.com的标签,我想提醒用户

我想使用tabCreate打开这样的URL:

tabCreate("http://maps.google.com/", "tabMapsPermanentAddress");
mean to open a new tab, it is use in creating chrome extension
Run Code Online (Sandbox Code Playgroud)

hex*_*D49 9

您可以使用以下内容

<!-- HTML -->
<a id="opener">Open window</a>

// JavaScript
var a = document.getElementById('opener'), w;        
a.onclick = function() {
  if (!w || w.closed) {
    w = window.open("https://www.google.com","_blank","menubar = 0, scrollbars = 0");
  } else {
    console.log('window is already opened');
  }
  w.focus();
};
Run Code Online (Sandbox Code Playgroud)

工作jsBin | 有关window.open方法的更多信息

如果要控制多个窗口,请使用下面的代码段

<!-- HTML -->
<a href="https://www.google.com" class="opener">Open google.com</a> | 
<a href="http://www.yahoo.com" class="opener">Open yahoo.com</a> 

//JavaScript
window.onload = function(){
  var a = document.querySelectorAll('.opener'), w = [], url, random, i;
  for(i = 0; i < a.length; i++){
    (function(i){
      a[i].onclick = function(e) {
        if (!w[i] || w[i].closed) {
          url = this.href;
          random = Math.floor((Math.random() * 100) + 1); 
          w[i] = window.open(url, "_blank", random, "menubar = 0, scrollbars = 0");
        } else {
          console.log('window ' + url + ' is already opened');
        }
        e.preventDefault();
        w[i].focus();
      };
    })(i);
  }
};
Run Code Online (Sandbox Code Playgroud)

工作jsBin

如果您不希望它们在单独的窗口中加载,只需排除此行

random = Math.floor((Math.random()*100)+1);
Run Code Online (Sandbox Code Playgroud)

并删除random下一行的引用

w[i] = window.open(url, "_blank", random, "menubar=0,scrollbars=0");
Run Code Online (Sandbox Code Playgroud)

附注:正如您在上面所看到的,我们创建了两个带有第三方内容的窗口; 你应该知道,没有办法从它们获得任何引用(到父/开启窗口).


Cas*_*Chu 5

一个基本的想法是将选项卡计数存储在cookie中,或者localStorage在页面加载时递增它,并在页面卸载时递减它:

if (+localStorage.tabCount > 0)
    alert('Already open!');
else
    localStorage.tabCount = 0;

localStorage.tabCount = +localStorage.tabCount + 1;
window.onunload = function () {
    localStorage.tabCount = +localStorage.tabCount - 1;
};
Run Code Online (Sandbox Code Playgroud)

尝试在多个标签中打开这个小提琴.

请注意,这种技术非常脆弱.例如,如果由于某种原因浏览器崩溃,卸载处理程序将无法运行,并且它将不同步.

  • 当浏览器崩溃时,`localStorege` 中的值被保留。`tabCount` 值永远不会再次达到 0。 (2认同)