Usando javascript, quiero abrir una nueva página en una pestaña diferente, pero permanecer enfocado en la pestaña actual. Sé que puedo hacerlo así:
open('http://example.com/');
focus();
Sin embargo, cuando hago esto en Chrome, parpadea la nueva pestaña por un momento antes de volver a la pestaña actual. Quiero evitar esto.
La aplicación es un bookmarklet personal, por lo que solo tiene que funcionar en la última versión de Chrome.
javascript
google-chrome
st-boost
fuente
fuente
Respuestas:
ACTUALIZACIÓN: En la versión 41 de Google Chrome,
initMouseEvent
parecía haber un cambio de comportamiento.esto se puede hacer simulando
ctrl
+click
(o cualquier otra combinación de clave / evento que abra una pestaña de fondo) en una
elemento generado dinámicamente con suhref
atributo establecido en el deseadourl
En acción: violín
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); }
probado solo en cromo
fuente
a.target='_blank';
.MouseEvent('click', {view: window, ctrlKey: true, metaKey: true});
, la pestaña recién abierta todavía roba el foco. ¿Me estoy perdiendo de algo?¡THX por esta pregunta! Me funciona bien en todos los navegadores populares:
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(); }
fuente
Por lo que recuerdo, esto está controlado por la configuración del navegador. En otras palabras: el usuario puede elegir si desea abrir una nueva pestaña en segundo plano o en primer plano. También pueden elegir si la nueva ventana emergente debe abrirse en una nueva pestaña o simplemente ... ventana emergente.
Por ejemplo, en las preferencias de Firefox:
Note la última opción.
fuente
Hice exactamente lo que buscabas de una manera muy sencilla. Es perfectamente fluido en Google Chrome y Opera, y casi perfecto en Firefox y Safari. No probado en IE.
function newTab(url) { var tab=window.open(""); tab.document.write("<!DOCTYPE html><html>"+document.getElementsByTagName("html")[0].innerHTML+"</html>"); tab.document.close(); window.location.href=url; }
Violín: http://jsfiddle.net/tFCnA/show/
Explicaciones:
Digamos que hay ventanas A1 y B1 y sitios web A2 y B2.
En lugar de abrir B2 en B1 y luego volver a A1, abro B2 en A1 y vuelvo a abrir A2 en B1.
(Otra cosa que hace que funcione es que no hago que el usuario vuelva a descargar A2, ver línea 4)
Lo único que quizás no le guste es que la nueva pestaña se abre antes que la página principal.
fuente
Aquí hay un ejemplo completo para navegar por una URL válida en una nueva pestaña con.
HTML:
<div class="panel"> <p> Enter Url: <input type="text" id="txturl" name="txturl" size="30" class="weburl" /> <input type="button" id="btnopen" value="Open Url in New Tab" onclick="openURL();"/> </p> </div>
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; } }
También he creado un contenedor con la solución en http://codebins.com/codes/home/4ldqpbw
fuente