87 votes

Ouvrir un nouvel onglet en arrière-plan?

En utilisant javascript, je souhaite ouvrir une nouvelle page dans un onglet différent, mais reste concentré sur l'onglet en cours. Je sais que je peux le faire comme ça:

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

Cependant, lorsque je fais ceci en chrome, le nouvel onglet clignote un instant avant de revenir à l'onglet en cours. Je veux éviter ça.

L'application est un bookmarklet personnel, elle ne doit donc fonctionner que dans la dernière version de Chrome.

8voto

user2837849 Points 57

THX pour cette question! Fonctionne bien pour moi sur tous les navigateurs populaires:

 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();
                    }
 

0voto

demee Points 323

Autant que je me souvienne, ceci est contrôlé par les paramètres du navigateur. En d’autres termes: l’utilisateur peut choisir s’il souhaite ouvrir un nouvel onglet en arrière-plan ou au premier plan. Ils peuvent aussi choisir si un nouveau menu contextuel doit s'ouvrir dans un nouvel onglet ou simplement ... un menu contextuel.

Par exemple, dans les préférences de Firefox:

Exemple de configuration de Firefox

Remarquez la dernière option.

0voto

Mageek Points 1480

J'ai fait exactement ce que vous cherchez dans une manière très simple. Il est parfaitement lisse dans Google Chrome et Opera, et presque parfait dans Firefox et Safari. Pas testé sous 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;
}

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

Explications:
Disons qu'il y a windows A1 et B1 et sites web A2 et B2.
Au lieu de l'ouverture de B2 en B1 et puis retour à A1, j'ai ouvert B2 A1 et ré-ouvrir A2 à B1.
(Une autre chose qui fait que cela fonctionne est que je n'ai pas l'utilisateur de re-télécharger A2, voir ligne 4)


La seule chose que vous pouvez ne l'aime pas, c'est que le nouvel onglet s'ouvre avant la page principale.

-3voto

Voici un exemple complet pour naviguer dans une URL valide sur un nouvel onglet avec focus.

HTML:

 <div class="panel">
  <p>
    Enter Url: 
    <input type="text" id="txturl" name="txturl" size="30" class="weburl" />
    &nbsp;&nbsp;    
    <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;
    }
}
 

J'ai également créé un bac avec la solution sur http://codebins.com/codes/home/4ldqpbw

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X