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:
let winStacko; setTimeout(() => { winStacko = open('https://www.stackoverflow.com'); }, 30 * 1000); setTimeout(() => winStacko.close(), 2 * 60 * 1000);
comportement désiré:
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
Load Unpacked
pour sélectionner le dossier d’extensionAuparavant, 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."
Je [~ # ~] partiellement [~ # ~] résolu à l'aide d'un Chrome: Forcer l'onglet Fond
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.
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';