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

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

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

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

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

 st-boost04 июл. 2012 г., 13:51
@WillemJoosten спасибо за первый ответ, который фактически достиг цели. Но есть ли способ сделать это вне расширения? Преимущество настолько мало, что оно перевесит время, необходимое для установки расширения.
 Code Spy30 мая 2012 г., 10:56
w3schools.com/js/js_ex_browser.asp попробуйте любой из этих
 st-boost30 мая 2012 г., 11:48
@ jolly.exe Спасибо, но никто из них не избегает моментального отображения новой страницы в Chrome.
 Willem Joosten04 июл. 2012 г., 09:43
Кажется, дубликат этого вопросаstackoverflow.com/questions/6897430/… Решение - использовать API расширения Chrome.

Ответы на вопрос(6)

что вы ищете, очень простым способом. Он идеально плавный в 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/

Пояснения:
Допустим, есть окна А1 и В1 и сайты А2 и В2.
Вместо того, чтобы открыть B2 в B1 и затем вернуться к A1, я открываю B2 в A1 и заново открываю A2 в B1.
(Еще одна вещь, которая заставляет его работать, это то, что я не заставляю пользователя повторно загружать A2, см. Строку 4)

The only thing you may doesn't like is that the new tab opens before the main page.

 05 июл. 2012 г., 10:09
Почему он не открывает новую страницу в другой вкладке?
 st-boost05 июл. 2012 г., 12:06
Технически, он открывает новую страницу в той же вкладке и ту же страницу в новой вкладке. Я знаю, что это просто грамматика, которая не имеет значения - важно то, что она отделяет страницу от ее истории (ломает кнопку назад) и делает Chrome и т. Д. Намного сложнее отслеживать иерархию вкладок.
 st-boost05 июл. 2012 г., 07:58
Спасибо, это умный подход. Однако у него есть ряд проблем, в том числе сглаживание прослушивателей событий, неправильное выравнивание истории браузера, потенциальное изменение типа документа и отбрасывание атрибутов в элементе html, не говоря уже о том, что он фактически не открывает новую страницу в другая вкладка & quot ;.

усом.

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

 st-boost03 июл. 2012 г., 21:54
Спасибо, но я думаю, вы неправильно поняли мой вопрос. Я хочу, чтобы открывающая страница была ориентирована в конце, а не на новую вкладку, и вопрос в том, как мне избежать отображения новой вкладки даже на мгновение.
Решение Вопроса

UPDATE: By version 41 of Google Chrome, initMouseEvent seemed to have a changed behavior.

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

In action: играть на скрипке

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

проверено только на хром

 02 апр. 2014 г., 18:58
Не работает в Firefox 28
 01 дек. 2014 г., 13:02
Похоже, что это перестало работать с Google Chrome dev версии 41.0.2224.0, выпущенным 2014-11-20 (протестировано в Linux). Не удивительно, так как я предполагаю, что это была «непреднамеренная функциональность» Начнем с того, что раздражает, так как я широко использовал его в локальных приложениях. Стабильные и бета-каналы Chrome пока не будут затронуты, но, вероятно, скоро объединят изменения.
 01 янв. 2013 г., 11:01
Не работает в IE9 или FF17
 st-boost09 июл. 2012 г., 12:01
Круто, я думаю, что мы получили это. Важное примечание: в OSX это значение metaKey, которое должно быть истинным.
 st-boost09 июл. 2012 г., 12:04
Еще одно примечание: это не будет работать с URL, которые имеют якорный текст, если вы не установитеa.target='_blank';.

рах:

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();
}
 22 мар. 2015 г., 12:15
От MDN & quot; Устаревший Эта функция была удалена из веб-стандартов. Хотя некоторые браузеры все еще могут поддерживать его, он находится в процессе удаления. Не используйте его в старых или новых проектах. Страницы или веб-приложения, использующие его, могут сломаться в любое время. & Quot;

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

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

Firefox setup example

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

 st-boost03 июл. 2012 г., 21:59
Спасибо, но я надеюсь, что что-то, что я смогу контролировать на веб-сайте, не хочу, чтобы это влияло на другие веб-сайты. (также ctrl / cmd + click делает то же самое - я использую это все время)
 20 февр. 2018 г., 02:56
это не для JavaScript, а только для настройки браузера.

он также работал с расширением Chrome. Все вышеперечисленное не работает для меня.

chrome.tabs.create({ url: "http://www.google.com/", selected: false }); 
 21 авг. 2017 г., 20:24
давая мне эту ошибку:Uncaught TypeError: Cannot read property 'create' of undefined
 20 февр. 2018 г., 02:55
код только для расширения Chrome, не работает для JS.
 16 янв. 2018 г., 15:59
@Xerus ответ выше работает только в случае расширения Chrome. поэтому приведенное выше заявление будет работать на фоновой странице расширения Chrome. chrome.tabs.create - API-интерфейс расширения Chrome

Ваш ответ на вопрос