web-dev-qa-db-fra.com

Ouvrez un nouvel onglet en arrière-plan, laissant le focus sur l’onglet actuel - Chrome

Comment exécuter en JavaScript un CTRL + clic sur un lien qui fonctionne dans la dernière version de Chrome (v68)?

Contexte - J'utilise un script JavaScript qui ouvre un onglet à certaines heures de la journée (et le ferme au bout de quelques minutes). J'essaie de le faire pour ouvrir l'onglet en arrière-plan en laissant le focus sur l'onglet actuel que j'utilise.

L'onglet ouvert par programme conduit Chrome à s'afficher même lorsqu'il est réduit au minimum, ce qui perturbe complètement.

Ces anciennes solutions que j'ai trouvé ici sur Stack Overflow ne fonctionnent pas avec la dernière version de Chrome.

Manuellement, CTRL + clic sur un lien permet d'obtenir l'effet souhaité (onglet ouvert en arrière-plan). Cela peut-il être réalisé par programme sur la dernière version de Chrome?


Le code suivant ne fonctionne plus avec la dernière version de Chrome.

const openNewBackgroundTab = (url) => {
  const anchor = document.createElement("a");
  anchor.href = url;
  document.body.appendChild(anchor);
  const evt = document.createEvent("MouseEvents");    
  // the tenth parameter of initMouseEvent sets ctrl key
  evt.initMouseEvent(
    "click", true, true, window, 0, 0, 0, 0, 0,
    true, false, false, false, 0, null
  );
  anchor.dispatchEvent(evt);
}
openNewBackgroundTab('https://stackoverflow.com');

.. le nouvel onglet obtient toujours le focus.


ÉTAPES à reproduire:

  • Ouvrez la fenêtre 1 et dans la console, exécutez:

let winStacko; setTimeout(() => { winStacko = open('https://www.stackoverflow.com'); }, 30 * 1000); setTimeout(() => winStacko.close(), 2 * 60 * 1000);

  • Ouvrez la fenêtre 2 dans les 30 secondes suivant l'exécution du script.

comportement désiré:

  • La fenêtre 2 a le focus pour tout le temps pendant que l'onglet arrière-plan est ouvert et ensuite fermé.
17
Ga Sacchi

Comme vous le souhaitez pour un usage personnel, et que l’utilisation d’une extension ne vous gêne pas, vous pouvez en écrire une vous-même.

Écrire une extension chrome pour obtenir votre comportement requis est en fait très facile. Tout ce que vous devez savoir, c'est comment ouvrir/fermer des onglets depuis l'extension. La page suivante décrit l'ensemble API

Voici un exemple :

1 - Créez un manifest.json, et demande la permission tabs

{
  "name": "blabla",
  "version": "0.1",
  "permissions": ["tabs"],
  "background": {
    "persistent": false,
    "scripts": ["background.js"]
  },
  "browser_action": {
    "default_title": "Open a background tab every x time"
  },
  "manifest_version": 2
}

2 - Créez background.js script dans le même dossier

const INTERVAL = 5000;
setTimeout(function(){
    chrome.tabs.create({url: "https://www.stackoverflow.com", active: false }, tab =>{
        setTimeout(function(){
            chrome.tabs.remove(tab.id);
        },INTERVAL);
    }); 
},INTERVAL);

vous pouvez le télécharger ici aussi

Remarque: Veuillez noter le paramètre active, il définit si l'onglet doit devenir l'onglet actif dans la fenêtre. N'affecte pas si la fenêtre est focalisée

3 - Utilisez l'extension en chrome

  1. Si vous utilisez le lien de téléchargement, décompressez l'archive.
  2. Naviguer du menu chrome aux extensions
  3. Activer le mode développeur dans le coin supérieur droit
  4. Cliquer sur Load Unpacked pour sélectionner le dossier d’extension
  5. L'extension fonctionnera automatiquement
4
Hyyan Abo Fakher

Auparavant, vous pouviez le faire en utilisant des choses comme:

if(window.focus == false)
{
    this.focus();
}


Maintenant, vous devez utiliser des plugins supplémentaires, en raison des abuseurs.
La solution: le basculement de la fenêtre:
La solution est de créer une autre page. Lorsque vous cliquez sur le lien, la fenêtre se ferme, elle bascule sur une page qui ouvre la fenêtre qui vient de se fermer et modifie son emplacement en nouvelle page.
Page 1 code:

document.getElementById("myId").onclick = function(){window.open("page2.html");window.close()}

Page 2 code:

window.open("previouspage.html");
window.location = "newpage.html";
//close the page
window.close();

J'appelle cette stratégie "Window Rollover."

3
bluninja1234

Je [~ # ~] partiellement [~ # ~] résolu à l'aide d'un Chrome: Forcer l'onglet Fond

https://chrome.google.com/webstore/detail/force-background-tab/gidlfommnbibbmegmgajdbikelkdcmcl/related?hl=fr

En utilisant cet add-on l'onglet est ouvert en arrière-plan sans focus. Le seul problème est que le dernier onglet utilisé de la fenêtre (peut être différent de l'onglet qui lance le nouvel onglet) apparaît toujours devant toute autre application utilisée.

2
Ga Sacchi

Vous pouvez essayer une sorte de pop-dessous, dans lequel vous ouvrez la même URL dans un nouvel onglet, puis modifiez le fichier location.href de l'onglet en cours à la nouvelle URL souhaitée.

window.open(window.location.href);
window.location.href = 'http://www.google.com';
1
TiagoMagalhaes