Используя javascript, я хочу открыть новую страницу на другой вкладке, но при этом сосредоточиться на текущей вкладке. Я знаю, что могу сделать это так:
open('http://example.com/');
focus();
Однако, когда я делаю это в хроме, новая вкладка на мгновение мигает, прежде чем переключиться обратно на текущую вкладку. Я хочу этого избежать.
Приложение представляет собой персональный букмарклет, поэтому оно должно работать только в последней версии Chrome.
javascript
google-chrome
St-Boost
источник
источник
Ответы:
ОБНОВЛЕНИЕ: К 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); }
проверено только на хроме
источник
a.target='_blank';
.MouseEvent('click', {view: window, ctrlKey: true, metaKey: true});
, вновь открытая вкладка все еще крадет фокус. Я что-то упускаю?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:
Обратите внимание на последний вариант.
источник
Я сделал именно то, что вы ищете, очень простым способом. Он отлично работает в 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/
Пояснения:
Допустим, есть окна 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" /> <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
источник