如何在不切换到新标签的情况下在 JavaScript 中打开新标签?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7924232/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 04:05:13  来源:igfitidea点击:

How to open new tab in JavaScript without switching to the new tab?

javascripthtml

提问by Miki Pavlov

How can I open a new tab using javascript without switching to the new tab?
For example, when a user clicks on a link a new tab is to be opened, but the user should stay on the current tab.

如何在不切换到新标签的情况下使用 javascript 打开新标签?
例如,当用户单击链接时,将打开一个新选项卡,但用户应停留在当前选项卡上。

回答by Mike

The web browser automatically focuses on the new tab, but you can call the focus back:

Web 浏览器会自动将焦点放在新选项卡上,但您可以回调焦点:

function openWindow( url )
{
  window.open(url, '_blank');
  window.focus();
}

<a href="http://www.example.com/" onclick="javascript:openWindow(this.href);return false;">Click Me</a>

回答by T.J. Crowder

Unfortunately, you can't currently do that -- but you can get close. You can open a new window, and if you do that without specifying any window dimensions or window features, most modern browsers will open a new tab instead (depending on the user's preferences, but then, you want to do what the user prefers anyway, right?). So just window.open(url)or window.open(url, name)if you're going to use the name for something. Be sure to do this in direct response to a user-initiated event, otherwise the browser's pop-up blocker will probably...block the pop-up. :-)

不幸的是,您目前无法做到这一点 - 但您可以接近。您可以打开一个新窗口,如果您在不指定任何窗口尺寸或窗口功能的情况下执行此操作,大多数现代浏览器将改为打开一个新选项卡(取决于用户的偏好,但是,无论如何,您都想做用户喜欢的事情,对?)。所以只是window.open(url)或者window.open(url, name)如果你打算使用这个名称来做某事。务必在直接响应用户启动的事件时执行此操作,否则浏览器的弹出窗口阻止程序可能会...阻止弹出窗口。:-)

Live example

活生生的例子

Regarding keeping focus on your window...good luck with that. You can call window.focus()after window.open(...), but in my experience it doesn't usually work.

关于将注意力集中在你的窗户上……祝你好运。您可以window.focus()在 之后调用window.open(...),但根据我的经验,它通常不起作用。

Throwing it out there: If you make the thing the user interacts with a genuine link with a URL, the usercan decide whether to open it in a new tab, a new window, whatever and whether to give it focus (if they're sophisticated enough to know Shift+Click and Ctrl+Shift+Click, or the right-click menu).

把它扔在那里:如果你让用户与带有 URL 的真实链接交互,用户可以决定是否在新选项卡、新窗口中打开它,以及是否给它焦点(如果他们是足够复杂,可以知道 Shift+Click 和 Ctrl+Shift+Click,或右键单击菜单)。

回答by Pavel Podlipensky

Unfortunately, you can't do this in ALL browsers, but you can do this in Chrome if you implement browser's extension. How to manipulate with tabs in Chrome by javascript:

不幸的是,您无法在所有浏览器中执行此操作,但如果您实现了浏览器的扩展程序,则可以在 Chrome 中执行此操作。如何通过 javascript 操作 Chrome 中的标签:

http://code.google.com/chrome/extensions/tabs.html

http://code.google.com/chrome/extensions/tabs.html

chrome.tabs.create(object createProperties, function callback)
    Creates a new tab. Note: This function can be used without requesting the 'tabs' permission in the manifest.
Parameters
    **createProperties** ( object )
    **windowId** ( optional integer )
       The window to create the new tab in. Defaults to the current window.
    **index** ( optional integer )
       The position the tab should take in the window. The provided value will be clamped to between zero and the number of tabs in the window.
    **url** ( optional string )
       The URL to navigate the tab to initially. Fully-qualified URLs must include a scheme (i.e.    'http://www.google.com', not 'www.google.com'). Relative URLs will be relative to the current page within the extension. Defaults to the New Tab Page.
    **selected** ( optional boolean )
       Whether the tab should become the selected tab in the window. Defaults to true
    pinned ( optional boolean )
       Whether the tab should be pinned. Defaults to false
    **callback** ( optional function )

回答by 0xd

This is user specific settings, you cannot change this behavior from JS.

这是用户特定的设置,您无法从 JS 更改此行为。

回答by EternalMonologue

For me, using

对我来说,使用

window.open("https://stackoverflow.com");

worked perfectly. What this does depends on what browser you are using, what operating system, and your personal preferences.

完美地工作。这取决于您使用的浏览器、操作系统和您的个人偏好。

Chrome, Internet Explorer, and Firefox all opened a new tab. Sorry if this doesn't work for you.

Chrome、Internet Explorer 和 Firefox 都打开了一个新标签。抱歉,如果这对您不起作用。

(Just realized that this is an old thread)

(刚刚意识到这是一个旧线程)

回答by spirinvladimir

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

回答by Danielle Cohen

 var isMobile = false;
        if (
          /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(
            navigator.userAgent
          ) ||
          /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
            navigator.userAgent.substr(0, 4)
          )
        ) {
          isMobile = true;
        }


    if (isMobile) {
    window.location.assign(url);
    } else {
window.open(url);

}

回答by IrajTaghlidi

Post is old but without any 100% correct answer.

帖子很旧,但没有任何 100% 正确的答案。

SOLUTION FOR ALL BROWSERs:

适用于所有浏览器的解决方案:

you can open new tab to same domainURLs via :

您可以通过以下方式打开指向相同域URL 的新标签:

window.open("newurl.php", "_blank");

and for cross-domain new tabs, you must create a simple local script, like this :

对于跨域新选项卡,您必须创建一个简单的本地脚本,如下所示:

in new file "redirect.php" you pass a parameter (target new tab url ) like this

在新文件“redirect.php”中,您传递一个参数(目标新标签 url ),如下所示

<?php
   $newURL=$_GET['u'];
   header('Location: '.$newURL);
?>

and you can create a new tab with any target url with :

您可以使用以下任何目标网址创建一个新选项卡:

window.open("redirect.php?u=http://www.google.com", "_blank");

:)

:)

its my solution in my website. and work with any

它是我在我的网站上的解决方案。并与任何