简体   繁体   English

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

[英]How to open new tab in JavaScript without switching to the new tab?

How can I open a new tab using javascript without switching to the new tab?如何在不切换到新标签的情况下使用 javascript 打开新标签?
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.例如,当用户单击链接时,将打开一个新选项卡,但用户应停留在当前选项卡上。

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>

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.因此window.open(url, name)如果您要为某事使用名称,只需使用window.open(url)window.open(url, name)即可。 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.确保在直接响应用户启动的事件时执行此操作,否则浏览器的弹出窗口阻止程序可能会...阻止弹出窗口。 :-) :-)

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.open(...) window.focus()之后调用window.focus() ,但根据我的经验,它通常不起作用。

Throwing it out there: If you make the thing the user interacts with a genuine link with a URL, the user can 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,或右键单击菜单)。

Unfortunately, you can't do this in ALL browsers, but you can do this in Chrome if you implement browser's extension.不幸的是,您不能在所有浏览器中执行此操作,但如果您实现了浏览器的扩展程序,则可以在 Chrome 中执行此操作。 How to manipulate with tabs in Chrome by javascript:如何通过 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 )
(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')))

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

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. Chrome、Internet Explorer 和 Firefox 都打开了一个新标签。 Sorry if this doesn't work for you.抱歉,如果这对您不起作用。

(Just realized that this is an old thread) (刚刚意识到这是一个旧线程)

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

}

in mac: Cmd+click and in windows: ctrl+click will open new tabs in the background.在 mac 中: Cmd+click和在 windows 中: ctrl+click将在后台打开新标签。 Perhaps this is an issue of user training rather than something that needs to be solved programmatically?也许这是用户培训的问题,而不是需要以编程方式解决的问题?

source: https://support.google.com/chrome/answer/157179?co=GENIE.Platform%3DDesktop&hl=en#zippy=%2Ctab-and-window-shortcuts%2Cmouse-shortcuts来源: https : //support.google.com/chrome/answer/157179?co=GENIE.Platform%3DDesktop&hl=en#zippy=%2Ctab-and-window-shortcuts%2Cmouse-shortcuts

Post is old but without any 100% correct answer.帖子很旧,但没有任何 100% 正确的答案。

SOLUTION FOR ALL BROWSERs:适用于所有浏览器的解决方案:

you can open new tab to same domain URLs 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并与任何

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM