Apri una nuova scheda in background?

Utilizzando javascript, voglio aprire una nuova pagina in una scheda diversa, ma rimanere concentrato sulla scheda corrente. So che posso farlo in questo modo:

open('http://example.com/'); focus(); 

Tuttavia, quando lo faccio in chrome, lampeggia la nuova scheda per un attimo prima di tornare alla scheda corrente. Voglio evitare questo.

L’applicazione è un bookmarklet personale, quindi deve funzionare solo nell’ultimo Chrome.

AGGIORNAMENTO: Dalla versione 41 di Google Chrome, initMouseEvent sembrava avere un comportamento modificato.

questo può essere fatto simulando ctrl + click (o qualsiasi altra combinazione di tasto / evento che apre una scheda di sfondo) su a elemento generato dynamicmente con il suo attributo href impostato url desiderato

In azione: violino

 function openNewBackgroundTab(){ var a = document.createElement("a"); a.href = "http://www.google.com/"; var 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); a.dispatchEvent(evt); } 

testato solo su Chrome

THX per questa domanda! Funziona bene con me su tutti i browser più diffusi:

 function openNewBackgroundTab(){ var a = document.createElement("a"); a.href = window.location.pathname; var 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); a.dispatchEvent(evt); } var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1; if(!is_chrome) { var url = window.location.pathname; var win = window.open(url, '_blank'); } else { openNewBackgroundTab(); } 

Per quanto mi ricordo, questo è controllato dalle impostazioni del browser. In altre parole: l’utente può scegliere se vorrebbe aprire una nuova scheda in background o in primo piano. Inoltre possono scegliere se aprire un nuovo popup in una nuova scheda o solo … popup.

Ad esempio nelle preferenze firefox:

Esempio di installazione di Firefox

Notare l’ultima opzione.

Prova questo. Funziona bene con il cromo, ha funzionato anche con l’estensione cromata. Tutto quanto sopra non ha funzionato per me.

 chrome.tabs.create({ url: "http://www.google.com/", selected: false }); 

Ho fatto esattamente quello che stai cercando in un modo molto semplice. È perfettamente scorrevole in Google Chrome e Opera e quasi perfetto in Firefox e Safari. Non testato in IE.


 function newTab(url) { var tab=window.open(""); tab.document.write(""+document.getElementsByTagName("html")[0].innerHTML+""); tab.document.close(); window.location.href=url; } 

Fiddle: http://jsfiddle.net/tFCnA/show/

spiegazioni:
Diciamo che ci sono Windows A1 e B1 e siti web A2 e B2.
Invece di aprire B2 in B1 e quindi tornare ad A1, apro B2 in A1 e riapre A2 in B1.
(Un’altra cosa che lo fa funzionare è che non faccio ri-scaricare l’utente A2, vedere la riga 4)


L’unica cosa che non ti piace è che la nuova scheda si apre prima della pagina principale.

Ecco un esempio completo per la navigazione di URL validi su una nuova scheda con focus.

HTML:

 

Enter Url:   

CSS:

 .panel{ font-size:14px; } .panel input{ border:1px solid #333; } 

Javascript:

 function isValidURL(url) { var RegExp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; if (RegExp.test(url)) { return true; } else { return false; } } function openURL() { var url = document.getElementById("txturl").value.trim(); if (isValidURL(url)) { var myWindow = window.open(url, '_blank'); myWindow.focus(); document.getElementById("txturl").value = ''; } else { alert("Please enter valid URL..!"); return false; } } 

Ho anche creato un cestino con la soluzione su http://codebins.com/codes/home/4ldqpbw