Открыть новую вкладку в фоновом режиме?


используя javascript, я хочу открыть новую страницу на другой вкладке, но сосредоточиться на текущей вкладке. Я знаю, что могу сделать это так:

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

однако, когда я делаю это в chrome, он мигает новую вкладку на мгновение перед переключением обратно на текущую вкладку. Я хочу избежать этого.

приложение является личным букмарклетом, поэтому он должен работать только в последнем Chrome.

6 61

6 ответов:

обновление: по версии 41 Google Chrome,initMouseEventказалось, что изменилось поведение.

это можно сделать, имитируя ctrl + click (или любые другие комбинации клавиш/событий, которые открывают вкладку фона) на динамически генерируемом a элемент href атрибут установлен на нужный url

действие:скрипка

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

тестируется только на chrome

THX для этого вопроса! Работает хорошо для меня на всех популярных браузерах:

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

насколько я помню, это настраивается в настройках браузера. Другими словами: пользователь может выбрать, хотят ли они открыть новую вкладку в фоновом режиме или на переднем плане. Также они могут выбрать, должно ли новое всплывающее окно открываться в новой вкладке или просто... всплывающий.

например, в настройках firefox:

Firefox setup example

обратите внимание на последний вариант.

попробуйте это. Он отлично работает с chrome, он также работал с расширением chrome. Все вышеперечисленное не сработало для меня.

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

Я сделал именно то, что вы ищете в очень простой способ. Он идеально гладкий в Google Chrome и Opera, и почти идеально подходит в Firefox и Safari. Не тестировался в 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;
}

Скрипка:http://jsfiddle.net/tFCnA/show/

объяснениями:
Допустим, есть windows A1 и B1 и веб-сайты A2 и B2.
Вместо того чтобы открыть B2 в B1 и затем вернуться к A1, я открываю B2 в A1 и снова открываю A2 в B1.
(Другое дело, что делает это работа заключается в том, что я не заставляю пользователя повторно загружать A2, см. строку 4)


единственное, что вы мая не нравится, что новая вкладка открывается перед главной страницы.

вот полный пример для навигации по допустимому URL на новой вкладке с фокусом.

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

Я также создал бин с решением на http://codebins.com/codes/home/4ldqpbw