Как открыть ссылку на новой вкладке после вызова ajax? [Дубликат]

Вы можете легко выбрать и скопировать блоки пользовательского интерфейса на веб-странице Google Analytics в Firebase, а затем просто вставить скопированные данные в лист Excel. Вы увидите причудливые таблицы.

Существует видео YouTube, в котором объясняется и демонстрируется процедура здесь: Скопируйте данные своей аналитики в электронную таблицу с помощью этого единого трюка WEIRD! - Firecasts

1664
задан Quentin 19 November 2015 в 12:05
поделиться

18 ответов

Ничто, которое может сделать автор, не может выбрать для открытия в новой вкладке вместо нового окна.

CSS3 предложил target-new , но спецификация была оставлена ​​.

Обратное неверно; указав размеры для окна в третьем аргументе window.open, вы можете запустить новое окно, когда предпочтение будет указано для вкладок.

704
ответ дан Quentin 20 August 2018 в 07:02
поделиться
  • 1
    @JacksonGariety - И как это переопределяет предпочтение браузера для окна или вкладки? – Quentin 5 November 2012 в 18:57
  • 2
    @AliHaideri Javascript не имеет ничего общего с тем, как открывается новая вкладка / окно. Все зависит от настроек вашего браузера. Используя window.open, браузер откроет что-то новое, затем браузер откроет то, что выбрано в его настройках - вкладка или окно. В браузерах, с которыми вы тестировали, измените настройки, которые нужно открыть в новом окне, а не на вкладке, и вы увидите, что решения других неверны. – Ian 18 April 2013 в 14:53
  • 3
    Две вещи, которые тратят время других людей больше, чем рассказывать им что-то, невозможно. (1) Сообщите им что-то, чего нельзя сделать can . (2) Не молчать и позволять им искать способ сделать что-то, что нельзя сделать. – Quentin 6 December 2013 в 10:15
  • 4
    @Cupcake - Документация обычно не мешает описать функции, которых не существует. [Д0] evernote.com/shard/s3/sh/428d2d68-39f9-491d-8352-8a9c217b67d7/… – Quentin 30 April 2014 в 10:07
  • 5
    @Neel - Потому что он лаконично подходит к теме, о которой многие люди хотят знать. – Quentin 16 May 2014 в 07:14

Я использую следующее, и он работает очень хорошо !!!

window.open(url, '_blank').focus();
317
ответ дан Peter Mortensen 20 August 2018 в 07:02
поделиться
  • 1
    Было бы неплохо отметить это как ПРАВИЛЬНЫЙ ответ. Мои тесты с Chrome v26 (Windows) подтверждают, что если код находится в обработчике кликов кнопки, он открывает новую вкладку и если код вызывается программно, например. с консоли, затем открывается новое окно. – CyberFonic 5 April 2013 в 06:26
  • 2
    @CyberFonic Нет причин для этого, так как это не правильный ответ. Он не определяет, как открывается новая вкладка / браузер. Вы не можете управлять им из Javascript. Это определяется настройками вашего браузера. – Ian 18 April 2013 в 14:57
  • 3
    @PaulBrown Этот ответ ничем не отличается от остальных. Они все говорят использовать window.open. Второй параметр имеет значение "_blank" ничего не меняет. Поэтому здесь нет никакой разницы. И тот факт, что они утверждают, что «window.open() не откроется на новой вкладке, если это не происходит при фактическом событии клика». также является неправильным. Настройки в браузере - это аргументы в пользу чего-либо, а не кода Javascript – Ian 19 April 2013 в 19:49
  • 4
    @PaulBrown Я не знаю, почему вы не согласитесь с тем, что вы не можете контролировать это. Все, что делали CyberFonic, объясняли / доказывали, что это еще одна несогласованность между браузерами, и показывают, что ненадежные window.open звонки отличаются от безопасных..ON CHROME. Я просто тестировал одно и то же на Firefox и IE и открывал их на новой вкладке. Вот пример, чтобы вы могли проверить свое маленькое сердце: jsfiddle.net/gEuMK . Почему вы одобряете решение, которое несовместимо между браузерами и только «работает»? на одном, даже если вы не можете контролировать, что происходит - реальное, безопасное событие или случайный / небезопасный? – Ian 19 April 2013 в 20:25
  • 5
    @PaulBrown Нет, это не так. Существует no гарантия того, что вкладка откроется (с точки зрения Javascript). Вкладки открываются для меня, потому что настройки моего браузера по умолчанию открываются на вкладке. Он работает для вас и других, потому что ваши настройки по умолчанию, вероятно, одинаковы. В вопросе говорилось «Как открыть URL-адрес на новой вкладке». Это и все другие вопросы с кодом, ответы и «Как открыть URL-адрес на основе настроек браузера по умолчанию». И для меня OP хочет полного управления. Если они хотят, чтобы что-то произошло, ответ должен был сделать . Эти ответы могут сделать это – Ian 19 April 2013 в 21:11
  • 6
    Это именно то, что я ожидал увидеть в качестве принятого ответа, есть ли причина не использовать этот вариант? Я тестировал Chrome, Safari и IE11, и он отлично работает в этих браузерах, но не имеет понятия о мобильных и LTE (IE10) – cloying 1 June 2015 в 09:46
  • 7
    Это может открыться в новом окне. Это может открыться на новой вкладке. Который он не находится под контролем автора сайта. Этот код такой же, как и код в вопросе, который говорит OP не для них. – Quentin 13 August 2015 в 18:33
  • 8
    Вы не ответили на вопрос, вы просто доказали, что window.open противоречиво. – BentOnCoding 15 January 2016 в 00:04
  • 9
    вызывает появление всплывающего блокатора – user 24 March 2016 в 22:42
  • 10
    -1. Это не верно. Вызов .focus() не влияет на то, открыта ли новая страница в окне или вкладке, так как это происходит после вызова .open(), а window.open(url, '_blank') буквально точно соответствует коду, который задает вопрос в вопрос и который он и многие другие плакаты здесь объяснили, не работают. – Mark Amery 15 May 2016 в 22:04
  • 11
    Спасибо, что он работает нормально, но настройки браузера необходимы для обработки всплывающих окон. – chetan 15 June 2016 в 04:40
  • 12
    Я действительно думаю, что это может быть хорошим решением, так как оно работает, как ожидается, открытие новой вкладки, а также хорошо работает даже с рекламодателями или блокировщиками всплывающих окон – LucioB 16 December 2016 в 16:23
  • 13
    Это не работает как в FF, так и в хроме. – Faisal Mq 8 February 2017 в 14:13
  • 14
    Нет. Это может открываться на новой вкладке или в новом окне в соответствии с предпочтениями пользователя. Вопрос заключается в том, как обеспечить его открытие на новой вкладке, а не в новом окне. – Quentin 17 January 2018 в 08:09

Один лайнер:

Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();

или

С помощью jQuery я использую этот:

var url = "http://google.com";
$("<a>").attr("href", url).attr("target", "_blank")[0].click();

Он создает виртуальную a элемент, дает ему target="_blank", поэтому он открывается в новой вкладке, дает ему url href и затем нажимает на него.

И если вы хотите, на основе этого вы можете создать некоторую функцию:

function openInNewTab(url) {
    $("<a>").attr("href", url).attr("target", "_blank")[0].click();
}

, а затем вы можете использовать его как:

openInNewTab("http://google.com");

Для сценария, отличного от jQuery, функция будет выглядеть так:

function openInNewTab(url) {
    var a = document.createElement("a");
    a.target = "_blank";
    a.href = url;
    a.click();
}

// And then
openInNewTab("http://google.com");
140
ответ дан pie6k 20 August 2018 в 07:02
поделиться
  • 1
    Спасибо. У вашего чистого JS есть недостающая часть - как писал Люк Олдертон (см. Ниже), вам нужно прикрепить созданный элемент к телу документа, в вашем коде он висит в пустоте, по крайней мере, в Firefox 37 он ничего не делает , – greenoldman 24 May 2015 в 06:55
  • 2
    @mcginniwa Любое действие, подобное этому - если оно не вызвано действием пользователя, например, щелчком мыши, это будет всплывающее блокирование. Представьте, что вы можете просто открыть любой URL-адрес с помощью Javascript без действий пользователя - это было бы очень опасно. Если вы помещаете этот код внутри события, как функция щелчка, он будет работать нормально - это все равно со всеми предлагаемыми решениями здесь. – pie6k 8 October 2015 в 12:11
  • 3
    Это была моя первая мысль. Наверное, лучше всего подумать о блокировщиках всплывающих окон. – Arg0n 16 June 2016 в 08:35
  • 4
    Вы можете упростить свой код следующим образом: $('<a />',{'href': url, 'target', '_blank'}).get(0).click(); – shaedrich 22 December 2017 в 18:20
  • 5
    @shaedrich, вдохновленный вашим отрезанным, я добавил не-jquery one-liner: Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click(); – pie6k 5 January 2018 в 13:07
  • 6

Это трюк,

function openInNewTab(url) {
  var win = window.open(url, '_blank');
  win.focus();
}

В большинстве случаев это должно происходить непосредственно в обработчике onclick для ссылки, чтобы предотвратить блокирование всплывающих окон, а поведение по умолчанию «новое окно» , Вы можете сделать это так, или добавив слушателя событий к вашему объекту DOM.

<div onclick="openInNewTab('www.test.com');">Something To Click On</div>

http://www.tutsplanet.com/open-url-new-tab-using-javascript-196/

1270
ответ дан Rinto George 20 August 2018 в 07:02
поделиться
  • 1
    Не работает. Появилось сообщение справа от адресной строки: Popup заблокирован . Затем я разрешил всплывающие окна. И voilà, он открывается всплывающим окном, а не вкладкой ! Chrome 22.0.1229.94 на OS X Lion. – nalply 21 October 2012 в 11:28
  • 2
    Я думаю, причина, по которой у многих людей возникают проблемы, заключается в том, что они не реализуют ее должным образом (хотя я не могу ее увидеть). Протестировано в ваниле: Chrome, IE, FF, SeaMonkey, Safari и Opera. Работает как шарм. – b1nary.atr0phy 6 April 2013 в 14:55
  • 3
    @Dhaval Измените настройки в браузерах. Открывается ли оно на вкладке или окне, определяется настройками вашего браузера. Вы ничего не можете сделать, вызвав window.open (или любой Javascript), чтобы выбрать , как открыть новое окно / вкладку. – Ian 18 April 2013 в 14:55
  • 4
    @ b1naryatr0phy Это потому, что вы на самом деле не тестировали его должным образом. Измените настройки в браузерах. Открывается ли оно на вкладке или окне, определяется настройками вашего браузера. Вы ничего не можете сделать, вызвав window.open (или любой Javascript), чтобы выбрать способ открытия нового окна / вкладки. – Ian 18 April 2013 в 14:56
  • 5
    @duke Можете ли вы предложить хотя бы один пример браузера, в котором с использованием кода OP новая страница открывается в новом окне, а с вашей, она открывается на новой вкладке? До сих пор вы не предложили какой-либо пример, в котором работает этот код, а другие предлагают много, в котором (они утверждают), что он терпит неудачу. – Mark Amery 19 June 2014 в 15:26

Если вы хотите только открыть внешние ссылки (ссылки, которые идут на другие сайты), то этот бит JavaScript / jQuery работает хорошо:

$(function(){
    var hostname = window.location.hostname.replace('www.', '');
    $('a').each(function(){
        var link_host = $(this).attr('hostname').replace('www.', '');
        if (link_host !== hostname) {
            $(this).attr('target', '_blank');
        }
    });
});
-6
ответ дан 2 revs, 2 users 69% 20 August 2018 в 07:02
поделиться
  • 1
    Этот ответ не подходит для этого вопроса. Но это очень полезно! Спасибо за вашу идею! – Nuri Akman 27 November 2014 в 11:38

эта работа для меня, просто предотвратите событие, добавьте URL-адрес в <a> tag, затем запустите событие click на этом tag.

Js
$('.myBtn').on('click', function(event) {
        event.preventDefault();
        $(this).attr('href',"http://someurl.com");
        $(this).trigger('click');
});
HTML
<a href="#" class="myBtn" target="_blank">Go</a>
0
ответ дан Carlos Salazar 20 August 2018 в 07:02
поделиться
  • 1
    Нет. Это может открываться на новой вкладке или в новом окне в соответствии с предпочтениями пользователя. Вопрос заключается в том, как обеспечить его открытие на новой вкладке, а не в новом окне. – Quentin 17 January 2018 в 08:07

Этот способ аналогичен приведенному выше решению, но реализован по-разному

.social_icon -> некоторый класс с CSS

 <div class="social_icon" id="SOME_ID" data-url="SOME_URL"></div>


 $('.social_icon').click(function(){

        var url = $(this).attr('data-url');
        var win = window.open(url, '_blank');  ///similar to above solution
        win.focus();
   });
0
ответ дан CG_DEV 20 August 2018 в 07:02
поделиться

Это не имеет ничего общего с настройками браузера, если вы пытаетесь открыть новую вкладку из пользовательской функции.

На этой странице откройте консоль JavaScript и введите:

document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").click();

И он попытается открыть всплывающее окно независимо от ваших настроек, потому что «щелчок» происходит из пользовательского действия.

Чтобы вести себя как фактический «щелчок мышью» по ссылке, вы нужно следовать рекомендациям @ spirinvladimir и really создать его:

document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").dispatchEvent((function(e){
  e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
                    false, false, false, false, 0, null);
  return e
}(document.createEvent('MouseEvents'))));

Вот полный пример (не пробуйте его на jsFiddle или аналогичные онлайн-редакторы, поскольку он не позволит вам перенаправлять на внешние страницы):

<!DOCTYPE html>
<html>
<head>
  <style>
    #firing_div {
      margin-top: 15px;
      width: 250px;
      border: 1px solid blue;
      text-align: center;
    }
  </style>
</head>
<body>
  <a id="my_link" href="http://www.google.com"> Go to Google </a>
  <div id="firing_div"> Click me to trigger custom click </div>
</body>
<script>
  function fire_custom_click() {
    alert("firing click!");
    document.getElementById("my_link").dispatchEvent((function(e){
      e.initMouseEvent("click", true, true, window, /* type, canBubble, cancelable, view */
            0, 0, 0, 0, 0,              /* detail, screenX, screenY, clientX, clientY */
            false, false, false, false, /* ctrlKey, altKey, shiftKey, metaKey */
            0, null);                   /* button, relatedTarget */
      return e
    }(document.createEvent('MouseEvents'))));
  }
  document.getElementById("firing_div").onclick = fire_custom_click;
</script>
</html>
14
ответ дан Community 20 August 2018 в 07:02
поделиться
  • 1
    Кажется, не работает для меня - он не открывает ни окно, ни вкладку при применении к & lt; a & gt; тег. – Paul Tomblin 30 January 2014 в 02:31
  • 2
    @PaulTomblin Я обновил свой ответ с полным примером, который должен вас поймать. – chipairon 30 January 2014 в 15:26
  • 3
    Я закончил работу с другим решением, где я делаю w = window.open("placeholder"); $.ajax(...ajax call that returns the url...) success (...w.location = data.url...) в соответствии с theandystratton.com/2012/… – Paul Tomblin 30 January 2014 в 16:19
  • 4
    @FahadAbidJanjua Это абсолютно не соответствует not . Все еще зависит от настроек браузера. В спецификациях HTML или Javascript нет ничего, что заявляло бы, что «пользовательское действие» должен открываться во всплывающем окне, а не на вкладке. Действительно, none браузеров на моем текущем компьютере отображает это поведение. – nmclean 7 April 2014 в 16:13
  • 5
    Не работает для меня в Chrome. – Ashley Davis 8 April 2014 в 12:45

Если это то, что вы просто пытаетесь загрузить на элемент, попробуйте использовать это. При загрузке страницы он добавит ваше целевое свойство с правильным атрибутом.

$ (your_element_here) .prop ('target', '_blank');

1
ответ дан HeroZero 20 August 2018 в 07:02
поделиться
  • 1
    Нет. Это может открываться на новой вкладке или в новом окне в соответствии с предпочтениями пользователя. Вопрос заключается в том, как обеспечить его открытие на новой вкладке, а не в новом окне. – Quentin 18 July 2018 в 23:51

Или вы могли бы просто создать элемент ссылки и щелкнуть по нему ...

var evLink = document.createElement('a');
evLink.href = 'http://' + strUrl;
evLink.target = '_blank';
document.body.appendChild(evLink);
evLink.click();
// Now delete it
evLink.parentNode.removeChild(evLink);

Это не должно блокироваться никакими всплывающими блокаторами ... Надеюсь.

1
ответ дан Luke Alderton 20 August 2018 в 07:02
поделиться
  • 1
    Протестировано в хроме и блокирует всплывающее окно! – King Julien 27 November 2013 в 10:17
  • 2
    Этот метод не работает в сафари и ie8 :( – Pragnesh Karia 3 February 2014 в 16:09
  • 3
    В заключение! Миллион спасибо, он работает (Firefox 37 на openSUSE 13.2). – greenoldman 24 May 2015 в 06:53

Браузер всегда откроет ссылку на новой вкладке, если ссылка находится в том же домене (на том же сайте). Если ссылка находится в другом домене, она откроет ее в новой вкладке / окне, в зависимости от настроек браузера.

Итак, в соответствии с этим мы можем использовать:

<a class="my-link" href="http://www.mywebsite.com" rel="http://www.otherwebsite.com">new tab</a>

И добавьте код jQuery:

jQuery(document).ready(function () {
    jQuery(".my-link").on("click",function(){
        var w = window.open('http://www.mywebsite.com','_blank');
        w.focus();
        w.location.href = jQuery(this).attr('rel');
        return false;
    });
});

Итак, сначала откройте новое окно на одном сайте с _blank target (он откроет его на новой вкладке), а затем откройте ваш желаемый веб-сайт в этом новом окне.

15
ответ дан Peter Mortensen 20 August 2018 в 07:02
поделиться
  • 1
    Это было полезно, поэтому, по крайней мере, некоторые браузеры (с настройками по умолчанию) открывали вкладку без предупреждения блокировки всплывающих окон. – Populus 5 November 2013 в 21:19
  • 2
    Это блокируется как всплывающее окно Firefox 28, Chrome 34b и Safari 7.0.2, все настройки запаса. :( – Steve Meisner 27 March 2014 в 15:39
  • 3
    +1 Это была именно моя проблема async: false помогает, но это опасно – Mina Gabriel 1 October 2014 в 16:37
  • 4
    Есть ли обходной путь? – Struggler 9 January 2015 в 20:01
  • 5
    Запускает блокировку всплывающих окон в Chrome 46. – t.mikael.d 28 October 2015 в 19:13
  • 6
    Если вы пойдете этим методом, убедитесь, что url не имеет параметров запроса, потому что они будут пропущены через форму submit. Одним из решений является встраивание скрытых входных элементов внутри элемента формы, которые имеют name как ключ & amp; value как значение для всех параметров внутри параметров запроса. Затем отправьте форму – Mudassir Ali 16 February 2016 в 13:49
  • 7
    это можно сделать более просто с тегом a вместо формы и с помощью метода jQuery .click() для "submit" Это. проверьте мой ответ – user 24 March 2016 в 22:37
  • 8
    Открытие нового окна вместо вкладки - это напротив того, что задает вопрос. – Quentin 4 April 2016 в 10:05
  • 9
    "новая вкладка не может быть открыта, если действие не вызывается пользователем (нажатие кнопки или что-то еще) или если оно асинхронно и - true для Chrome, но не соответствует всем браузерам. Сохраните файл <script>open('http://google.com')</script> в файл .html и откройте его в новой версии последней версии Firefox; вы заметите, что Firefox с радостью открывает Google на новой вкладке (возможно, после того, как вы сообщите ей, чтобы разрешить всплывающие окна), а не в новом окне. – Mark Amery 15 May 2016 в 21:53
  • 10
    Нет, не работает. Попробовал поменять Firefox по умолчанию на открытие страниц в новых окнах с помощью настроек, затем вставил этот точный код на страницу с <button id='btn'>click me</button>, нажал кнопку и ... получил новое окно, а не новую вкладку. Можете ли вы указать какое-либо обстоятельство, в котором форма отправки будет открыта на новой вкладке, когда в новом окне откроется простой window.open? Я не считаю, что такое обстоятельство существует. – Mark Amery 15 May 2016 в 22:01
  • 11
    & quot; Просто опустите параметры [strWindowFeatures] & quot; - Код в вопросе уже делает это . "УДАЛИТЬ НЕЗАВИСИМОЕ УСТРОЙСТВО УСТРОЙСТВА" & quot; - Вопрос заключается в противодействии настройке браузера. – Quentin 10 June 2016 в 09:15
  • 12
    Нет. Это может открываться на новой вкладке или в новом окне в соответствии с предпочтениями пользователя. Вопрос заключается в том, как обеспечить его открытие на новой вкладке, а не в новом окне. – Quentin 14 September 2016 в 07:41

Открытие новой вкладки из расширения Firefox (Mozilla) происходит следующим образом:

gBrowser.selectedTab = gBrowser.addTab("http://example.com");
-1
ответ дан Smile4ever 20 August 2018 в 07:02
поделиться
(function(a){
document.body.appendChild(a);
a.setAttribute('href', location.href);
a.dispatchEvent((function(e){
    e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
    return e
}(document.createEvent('MouseEvents'))))}(document.createElement('a')))
10
ответ дан spirinvladimir 20 August 2018 в 07:02
поделиться
  • 1
    Это единственное решение, которое работало для меня при попытке открыть новую вкладку из пользовательской функции JS. Я бы предпочел создать элемент внутри функции, но все в порядке. – chipairon 22 November 2013 в 13:28
  • 2
    Не открывает окно или вкладку для меня. – Paul Tomblin 30 January 2014 в 02:34
  • 3
    В Chrome версии 32.0.1700.102 этот код заблокирован как всплывающие окна – spirinvladimir 1 February 2014 в 19:21

Как-то сайт может это сделать. (У меня нет времени извлечь его из этого беспорядка, но это код)

if (!Array.prototype.indexOf)
    Array.prototype.indexOf = function(searchElement, fromIndex) {
        if (this === undefined || this === null)
            throw new TypeError('"this" is null or not defined');
        var length = this.length >>> 0;
        fromIndex = +fromIndex || 0;
        if (Math.abs(fromIndex) === Infinity)
            fromIndex = 0;
        if (fromIndex < 0) {
            fromIndex += length;
            if (fromIndex < 0)
                fromIndex = 0
        }
        for (; fromIndex < length; fromIndex++)
            if (this[fromIndex] === searchElement)
                return fromIndex;
        return -1
    };
(function Popunder(options) {
    var _parent, popunder, posX, posY, cookieName, cookie, browser, numberOfTimes, expires = -1,
        wrapping, url = "",
        size, frequency, mobilePopupDisabled = options.mobilePopupDisabled;
    if (this instanceof Popunder === false)
        return new Popunder(options);
    try {
        _parent = top != self && typeof top.document.location.toString() === "string" ? top : self
    } catch (e) {
        _parent = self
    }
    cookieName = "adk2_popunder";
    popunder = null;
    browser = function() {
        var n = navigator.userAgent.toLowerCase(),
            b = {
                webkit: /webkit/.test(n),
                mozilla: /mozilla/.test(n) && !/(compatible|webkit)/.test(n),
                chrome: /chrome/.test(n),
                msie: /msie/.test(n) && !/opera/.test(n),
                firefox: /firefox/.test(n),
                safari: /safari/.test(n) && !/chrome/.test(n),
                opera: /opera/.test(n)
            };
        b.version = b.safari ? (n.match(/.+(?:ri)[\/: ]([\d.]+)/) || [])[1] : (n.match(/.+(?:ox|me|ra|ie)[\/:]([\d.]+)/) || [])[1];
        return b
    }();
    initOptions(options);

    function initOptions(options) {
        options = options || {};
        if (options.wrapping)
            wrapping = options.wrapping;
        else {
            options.serverdomain = options.serverdomain || "ads.adk2.com";
            options.size = options.size || "800x600";
            options.ci = "3";
            var arr = [],
                excluded = ["serverdomain", "numOfTimes", "duration", "period"];
            for (var p in options)
                options.hasOwnProperty(p) && options[p].toString() && excluded.indexOf(p) === -1 && arr.push(p + "=" + encodeURIComponent(options[p]));
            url = "http://" + options.serverdomain + "/player.html?rt=popunder&" + arr.join("&")
        }
        if (options.size) {
            size = options.size.split("x");
            options.width = size[0];
            options.height = size[1]
        }
        if (options.frequency) {
            frequency = /([0-9]+)\/([0-9]+)(\w)/.exec(options.frequency);
            options.numOfTimes = +frequency[1];
            options.duration = +frequency[2];
            options.period = ({
                m: "minute",
                h: "hour",
                d: "day"
            })[frequency[3].toLowerCase()]
        }
        if (options.period)
            switch (options.period.toLowerCase()) {
                case "minute":
                    expires = options.duration * 60 * 1e3;
                    break;
                case "hour":
                    expires = options.duration * 60 * 60 * 1e3;
                    break;
                case "day":
                    expires = options.duration * 24 * 60 * 60 * 1e3
            }
        posX = typeof options.left != "undefined" ? options.left.toString() : window.screenX;
        posY = typeof options.top != "undefined" ? options.top.toString() : window.screenY;
        numberOfTimes = options.numOfTimes
    }

    function getCookie(name) {
        try {
            var parts = document.cookie.split(name + "=");
            if (parts.length == 2)
                return unescape(parts.pop().split(";").shift()).split("|")
        } catch (err) {}
    }

    function setCookie(value, expiresDate) {
        expiresDate = cookie[1] || expiresDate.toGMTString();
        document.cookie = cookieName + "=" + escape(value + "|" + expiresDate) + ";expires=" + expiresDate + ";path=/"
    }

    function addEvent(listenerEvent) {
        if (document.addEventListener)
            document.addEventListener("click", listenerEvent, false);
        else
            document.attachEvent("onclick", listenerEvent)
    }

    function removeEvent(listenerEvent) {
        if (document.removeEventListener)
            document.removeEventListener("click", listenerEvent, false);
        else
            document.detachEvent("onclick", listenerEvent)
    }

    function isCapped() {
        cookie = getCookie(cookieName) || [];
        return !!numberOfTimes && +numberOfTimes <= +cookie[0]
    }

    function pop() {
        var features = "type=fullWindow, fullscreen, scrollbars=yes",
            listenerEvent = function() {
                var now, next;
                if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))
                    if (mobilePopupDisabled)
                        return;
                if (isCapped())
                    return;
                if (browser.chrome && parseInt(browser.version.split(".")[0], 10) > 30 && adParams.openNewTab) {
                    now = new Date;
                    next = new Date(now.setTime(now.getTime() + expires));
                    setCookie((+cookie[0] || 0) + 1, next);
                    removeEvent(listenerEvent);
                    window.open("javascript:window.focus()", "_self", "");
                    simulateClick(url);
                    popunder = null
                } else
                    popunder = _parent.window.open(url, Math.random().toString(36).substring(7), features);
                if (wrapping) {
                    popunder.document.write("<html><head></head><body>" + unescape(wrapping || "") + "</body></html>");
                    popunder.document.body.style.margin = 0
                }
                if (popunder) {
                    now = new Date;
                    next = new Date(now.setTime(now.getTime() + expires));
                    setCookie((+cookie[0] || 0) + 1, next);
                    moveUnder();
                    removeEvent(listenerEvent)
                }
            };
        addEvent(listenerEvent)
    }
    var simulateClick = function(url) {
        var a = document.createElement("a"),
            u = !url ? "data:text/html,<script>window.close();<\/script>;" : url,
            evt = document.createEvent("MouseEvents");
        a.href = u;
        document.body.appendChild(a);
        evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, true, 0, null);
        a.dispatchEvent(evt);
        a.parentNode.removeChild(a)
    };

    function moveUnder() {
        try {
            popunder.blur();
            popunder.opener.window.focus();
            window.self.window.focus();
            window.focus();
            if (browser.firefox)
                openCloseWindow();
            else if (browser.webkit)
                openCloseTab();
            else
                browser.msie && setTimeout(function() {
                    popunder.blur();
                    popunder.opener.window.focus();
                    window.self.window.focus();
                    window.focus()
                }, 1e3)
        } catch (e) {}
    }

    function openCloseWindow() {
        var tmp = popunder.window.open("about:blank");
        tmp.focus();
        tmp.close();
        setTimeout(function() {
            try {
                tmp = popunder.window.open("about:blank");
                tmp.focus();
                tmp.close()
            } catch (e) {}
        }, 1)
    }

    function openCloseTab() {
        var ghost = document.createElement("a"),
            clk;
        document.getElementsByTagName("body")[0].appendChild(ghost);
        clk = document.createEvent("MouseEvents");
        clk.initMouseEvent("click", false, true, window, 0, 0, 0, 0, 0, true, false, false, true, 0, null);
        ghost.dispatchEvent(clk);
        ghost.parentNode.removeChild(ghost);
        window.open("about:blank", "PopHelper").close()
    }
    pop()
})(adParams)
-9
ответ дан Totty.js 20 August 2018 в 07:02
поделиться
  • 1
    Добавьте контекст, прежде чем просто выбросить весь этот код. – chntgomez 11 May 2015 в 23:49

Я соглашусь с тем, кто написал (перефразировал здесь): «Для ссылки на существующей веб-странице браузер всегда откроет ссылку на новой вкладке, если новая страница является частью того же веб-сайт как существующая веб-страница ». Для меня, по крайней мере, это «общее правило» работает в Chrome, Firefox, Opera, IE, Safari, SeaMonkey и Konqueror.

В любом случае существует менее сложный способ воспользоваться тем, что другое человек представлен. Предполагая, что мы говорим о вашем собственном веб-сайте («thissite.com» ниже), где вы хотите контролировать, что делает браузер, а затем ниже, вы хотите, чтобы «specialpage.htm» был ПУСТОЙ, в нем вообще не было HTML-кода ( экономит время на отправку данных с сервера!).

 var wnd, URL;  //global variables

 //specifying "_blank" in window.open() is SUPPOSED to keep the new page from replacing the existing page
 wnd = window.open("http://www.thissite.com/specialpage.htm", "_blank"); //get reference to just-opened page
 //if the "general rule" above is true, a new tab should have been opened.
 URL = "http://www.someothersite.com/desiredpage.htm";  //ultimate destination
 setTimeout(gotoURL(),200);  //wait 1/5 of a second; give browser time to create tab/window for empty page


 function gotoURL()
 { wnd.open(URL, "_self");  //replace the blank page, in the tab, with the desired page
   wnd.focus();             //when browser not set to automatically show newly-opened page, this MAY work
 }
-4
ответ дан vernonner3voltazim 20 August 2018 в 07:02
поделиться
0
ответ дан ALZlper 31 October 2018 в 06:16
поделиться
15
ответ дан Community 31 October 2018 в 06:16
поделиться
321
ответ дан Peter Mortensen 31 October 2018 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: