使用JavaScript在新选项卡(而不是新窗口)中打开URL

时间:2011-02-05 15:52:14

标签: javascript

我正在尝试在新标签页中打开URL,而不是弹出窗口。

我已经看到了相关的问题,其中的回答看起来像是:

window.open(url,'_blank');
window.open(url);

但是他们都没有为我工作,浏览器仍然试图打开一个弹出窗口。

34 个答案:

答案 0 :(得分:1482)

这是一个技巧,

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/

答案 1 :(得分:792)

作者无法做的任何事情都可以选择在新标签页中打开而不是在新窗口中打开;它是用户首选项

CSS3提出target-new,但the specification was abandoned

反向不是真的;通过在window.open()的第三个参数中指定窗口的维度,可以在首选项用于选项卡时触发新窗口。

答案 2 :(得分:339)

如果在实际点击事件中没有发生,则

window.open()将无法在新标签页中打开。在给定的示例中,URL正在实际的单击事件上打开。 如果用户在浏览器中有适当的设置,这将有效。

<a class="link">Link</a>
<script  type="text/javascript">
     $("a.link").on("click",function(){
         window.open('www.yourdomain.com','_blank');
     });
</script>

同样,如果您尝试在click函数中执行Ajax调用并希望在成功时打开一个窗口,请确保在设置async : false选项的情况下进行Ajax调用。

答案 3 :(得分:237)

window.open无法在所有浏览器的新标签页中可靠地打开弹出窗口

不同的浏览器以不同的方式实现 window.open 的行为,尤其是在用户的浏览器偏好方面。您不能指望{{{ 1}}在所有Internet Explorer,Firefox和Chrome中都是如此,因为它们处理用户浏览器首选项的方式不同。

例如,Internet Explorer(11)用户可以选择在新窗口或新选项卡中打开弹出窗口,您无法强制Internet Explorer 11用户通过某种方式打开弹出窗口 {{ 1}},如Quentin's answer中提到的那样。

对于Firefox(29)用户,使用window.open 取决于其浏览器的标签首选项,但您仍然可以通过指定宽度和高度强制它们在新窗口中打开弹出窗口(请参阅下文“关于Chrome的内容?”部分。)

示范

转到浏览器的设置并将其配置为在新窗口中打开弹出窗口。

Internet Explorer(11)

Internet Explorer settings dialog 1

Internet Explorer tab settings dialog

测试页

如上所示,在设置Internet Explorer(11)以在新窗口中打开弹出窗口后,使用以下测试页来测试window.open

window.open(url, '_blank')

观察弹出窗口是在新窗口中打开 ,而不是新标签。

您还可以在Firefox(29)中测试上面的代码段,并将其选项卡首选项设置为新窗口,并查看相同的结果。

Chrome怎么样?它实现window.open与Internet Explorer(11)和Firefox(29)不同。

我不是百分百确定,但看起来Chrome(版本<!DOCTYPE html> <html> <head> <title>Test</title> </head> <body> <button onclick="window.open('https://stackoverflow.com/q/4907843/456814');"> <code>window.open(url)</code> </button> <button onclick="window.open('https://stackoverflow.com/q/4907843/456814', '_blank');"> <code>window.open(url, '_blank')</code> </button> </body> </html> )似乎没有任何设置可供用户选择是否在新窗口中打开弹出窗口或新标签(如Firefox和Internet Explorer)。我检查了the Chrome documentation for managing pop-ups,但它没有提到任何关于那种事情。

此外,再一次,不同的浏览器似乎以不同的方式实现了 window.open 的行为。在Chrome和Firefox中, 指定了宽度和高度将强制弹出 ,即使用户已设置Firefox(29)以在新选项卡中打开新窗口(如JavaScript open in a new window, not tab的答案中所述):

34.0.1847.131 m

但是,如果用户将标签设置为浏览器首选项,则上方的相同代码段将始终在Internet Explorer 11中打开新标签,即使指定宽度和高度也不会强制弹出新窗口它们。

因此,window.open在Chrome中的行为似乎是在<!DOCTYPE html> <html> <head> <title>Test</title> </head> <body> <button onclick="window.open('https://stackoverflow.com/q/4907843/456814', 'test', 'width=400, height=400');"> <code>window.open(url)</code> </button> </body> </html> 事件中使用时在新标签页中打开弹出窗口,以便在浏览器控制台中使用时在新窗口中打开它们({{ 3}}),并在指定宽度和高度时在新窗口中打开它们。

摘要

不同的浏览器会针对用户的浏览器偏好设置实现 window.open 的行为。您不能指望onclick的行为相同适用于所有Internet Explorer,Firefox和Chrome,因为它们处理用户浏览器首选项的方式不同。

补充阅读

答案 4 :(得分:191)

一个班轮:

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

它会创建一个虚拟的a元素,并为其提供target="_blank",以便在新标签页中打开,正确url href,然后点击它。

如果你愿意,根据你可以创建一些功能:

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

然后您就可以使用它:

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

答案 5 :(得分:59)

如果您使用window.open(url, '_blank'),则会在Chrome上阻止(弹出窗口拦截器)。

试试这个:

//With JQuery

$('#myButton').click(function () {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
});

使用纯JavaScript,

document.querySelector('#myButton').onclick = function() {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
};

答案 6 :(得分:57)

为了详细说明斯蒂芬斯皮尔伯格的答案,我在这种情况下这样做了:

$('a').click(function() {
  $(this).attr('target', '_blank');
});

这样,就在浏览器按照我设置目标属性的链接之前,所以它会在新的标签页或窗口中打开链接(取决于用户的设置)。 / p>

答案 7 :(得分:33)

我使用以下内容并且效果非常好!!!

window.open(url, '_blank').focus();

答案 8 :(得分:18)

一个有趣的事实是,如果用户未调用该操作(单击按钮或某物)或者它是异步的,则无法打开新选项卡,例如,这将不会在新选项卡中打开:

$.ajax({
    url: "url",
    type: "POST",
    success: function() {
        window.open('url', '_blank');              
    }
});

但是这可能会在新标签页中打开,具体取决于浏览器设置:

$.ajax({
    url: "url",
    type: "POST",
    async: false,
    success: function() {
        window.open('url', '_blank');              
    }
});

答案 9 :(得分:15)

我认为你无法控制这一点。如果用户已将浏览器设置为在新窗口中打开链接,则无法强制此操作在新选项卡中打开链接。

JavaScript open in a new window, not tab

答案 10 :(得分:13)

只要省略[strWindowFeatures]参数,就会打开一个新选项卡,除非浏览器设置覆盖(浏览器设置胜过JavaScript)。

新窗口

var myWin = window.open(strUrl, strWindowName, [strWindowFeatures]);

新标签

var myWin = window.open(strUrl, strWindowName);

- 或 -

var myWin = window.open(strUrl);

答案 11 :(得分:11)

(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')))

答案 12 :(得分:11)

您可以使用form

的技巧
$(function () {
    $('#btn').click(function () {
        openNewTab("http://stackoverflow.com")
        return false;
    });
});

function openNewTab(link) {
    var frm = $('<form   method="get" action="' + link + '" target="_blank"></form>')
    $("body").append(frm);
    frm.submit().remove();
}

jsFiddle demo

答案 13 :(得分:10)

如果您尝试从自定义功能打开新标签页,则这与浏览器设置无关

在此页面中,打开JavaScript控制台并输入:

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

无论您的设置如何,它都会尝试打开弹出窗口,因为“点击”来自自定义操作。

为了表现得像链接上的实际“鼠标点击”,您需要关注@spirinvladimir's advice真正创建它:

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 :(得分:3)

或者你可以创建一个链接元素并单击它......

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

任何弹出窗口阻止程序都不应该阻止它......希望如此。

答案 15 :(得分:2)

实际上是由用户的浏览器首选项控制是在新选项卡还是在新窗口中打开URL。无法在JavaScript中覆盖它。

window.open()的行为取决于使用方式。如果直接由于用户操作而被调用,让我们说一次按钮单击,它应该可以正常工作并打开一个新标签页(或窗口):

const button = document.querySelector('#openTab');

// add click event listener
button.addEventListener('click', () => {
    // open a new tab
    const tab = window.open('https://attacomsian.com', '_blank');
});

但是,如果您尝试从AJAX请求回调中打开新标签页,则浏览器将阻止它,因为这不是直接的用户操作。

绕过弹出窗口阻止程序并从回调中打开新标签,这里是little hack

const button = document.querySelector('#openTab');

// add click event listener
button.addEventListener('click', () => {

    // open an empty window
    const tab = window.open('about:blank');

    // make an API call
    fetch('/api/validate')
        .then(res => res.json())
        .then(json => {

            // TODO: do something with JSON response

            // update the actual URL
            tab.location = 'https://attacomsian.com';
            tab.focus();
        })
        .catch(err => {
            // close the empty window
            tab.close();
        });
});

答案 16 :(得分:2)

jQuery

$('<a />',{'href': url, 'target': '_blank'}).get(0).click();

JS

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

答案 17 :(得分:2)

这个问题有一个答案,但不是。

  

我找到了一个简单的解决方法:

第1步:创建一个不可见的链接:

<a id="yourId" href="yourlink.html" target="_blank" style="display: none;"></a>

第2步:以编程方式单击该链接:

document.getElementById("yourId").click();

您在这里!为我创造魅力。

答案 18 :(得分:1)

如果您只是想加载到元素上,请尝试使用它。在页面加载时,它将使用正确的属性添加您的目标属性。

$(your_element_here).prop('target','_ blank');

答案 19 :(得分:0)

如何创建一个<a> _blank作为target属性值而url作为href,样式显示:隐藏一个子元素?然后添加到DOM,然后在children元素上触发click事件。

更新

这不起作用。浏览器会阻止默认行为。它可以通过编程方式触发,但不会遵循默认行为。

自行检查并查看:http://jsfiddle.net/4S4ET/

答案 20 :(得分:0)

请勿使用target =“ _ blank”

在我的情况下,meaningfulName始终为该窗口使用特定的名称,在这种情况下,您可以节省处理器资源:

button.addEventListener('click', () => {
    window.open('https://google.com', 'meaningfulName')
})

这样,当您单击例如10次按钮时,浏览器将始终在一个新选项卡中重新呈现它,而不是在10个不同的选项卡中打开它会占用更多资源。

您可以在MDN上了解有关此内容的更多信息。

答案 21 :(得分:0)

enter image description here

我研究了很多有关如何打开新标签页并保持在同一标签页上的信息。我发现了一个小窍门。 假设您有需要打开的URL- newUrl 和旧的URL- currentUrl ,在打开新标签页后需要将其保留。 JS代码如下所示:

// init urls
let newUrl = 'http://example.com';
let currentUrl = window.location.href;
// open window with url of current page, you will be automatically moved 
// by browser to a new opened tab. It will look like your page is reloaded
// and you will stay on same page but with new page opened
window.open(currentUrl , '_blank');
// on your current tab will be opened new url
location.href = newUrl;

答案 22 :(得分:0)

function openTab(url) {
  const link = document.createElement('a');
  link.href = url;
  link.target = '_blank';
  document.body.appendChild(link);
  link.click();
  link.remove();
}

答案 23 :(得分:-1)

有很多答案副本建议使用“ _blank”作为目标,但是我发现这没有用。正如Prakash指出的,这取决于浏览器。但是,您可以向浏览器提出某些建议,例如该窗口是否应具有位置栏。

如果您建议足够的 “类似标签的内容” ,则您 可能 获得标签,{{3 }}:

window.open('http://www.stackoverflow.com', '_blank', 'toolbar=yes, location=yes, status=yes, menubar=yes, scrollbars=yes');

免责声明:这不是万能药。它仍然取决于用户和浏览器。现在,至少您还为窗口的外观指定了一个首选项。

答案 24 :(得分:-1)

window.open(url)将在新的浏览器选项卡中打开URL。下面的JS替代品

let a= document.createElement('a');
a.target= '_blank';
a.href= 'https://support.wwf.org.uk/';
a.click(); // we don't need to remove 'a' from DOM because we not add it

这里工作正常example(stackoverflow片段不允许打开新标签页)

答案 25 :(得分:-1)

这项工作对我来说,只是阻止该事件,将网址添加到<a> tag,然后触发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>

答案 26 :(得分:-1)

这种方式类似于上述解决方案,但实现方式不同

.social_icon - &gt;一些带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();
   });

答案 27 :(得分:-1)

在Firefox(Mozilla)扩展程序中打开一个新标签,如下所示:

gBrowser.selectedTab = gBrowser.addTab("http://example.com");

答案 28 :(得分:-1)

这可能是一个黑客,但在Firefox中,如果你指定第三个参数'fullscreen = yes',它会打开一个全新的窗口。

例如,

<a href="#" onclick="window.open('MyPDF.pdf', '_blank', 'fullscreen=yes'); return false;">MyPDF</a>

它似乎实际上覆盖了浏览器设置。

答案 29 :(得分:-2)

我尝试过这种方式,看来效果很好

window.open('example.com', 'newWin');

我在这里找到了许多可行的例子:

http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#TestPopupControl

答案 30 :(得分:-4)

我会与编写的人(在此解释)略微达成一致:&#34;对于现有网页中的链接,如果是新页面,浏览器将始终在新标签页中打开链接是与现有网页相同的网站的一部分。&#34;对我来说,至少,这个&#34;一般规则&#34;适用于Chrome,Firefox,Opera,IE,Safari,SeaMonkey和Konqueror。

无论如何,有一种不那么复杂的方式来利用对方提出的内容。假设我们正在讨论您自己的网站(&#34; thissite.com&#34;下面),您想要控制浏览器的功能,那么,在下面,您需要&#34; specialpage.htm&#34;是EMPTY,其中根本没有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
 }

答案 31 :(得分:-6)

如果您只想打开外部链接(转到其他网站的链接),那么这个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');
        }
    });
});

答案 32 :(得分:-9)

不知何故,website可以做到。 (我没有时间从这个烂摊子中提取它,但这是代码)

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)

答案 33 :(得分:-10)

如果链接位于同一个域(在同一网站上),浏览器将始终在新选项卡中打开链接。如果该链接位于其他某个域,则会在新的选项卡/窗口中打开它,具体取决于浏览器设置。

所以,根据这个,我们可以使用:

<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目标打开新窗口(它会在新标签中打开它),然后在新窗口中打开你想要的网站。