Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: по версии 41 Google Chrome initMouseEvent , похоже, изменилось поведение.

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

В действии: fiddle

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

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

Ответ 2

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

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

Ответ 3

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

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

Firefox setup example

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

Ответ 4

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

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

Ответ 5

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

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

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


Единственное, что вам может не понравиться, это открыть новую вкладку перед главной страницей.

Ответ 6

Вот полный пример для навигации по допустимому 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;
    }
}

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