Javascript 是否在后台打开新选项卡?

Javascript 是否在后台打开新选项卡?,javascript,google-chrome,Javascript,Google Chrome,使用javascript,我希望在不同的选项卡中打开一个新页面,但仍然关注当前选项卡。我知道我可以这样做: open('http://example.com/'); focus(); 然而,当我在chrome中执行此操作时,它会在切换回当前选项卡之前闪烁新选项卡片刻。我想避免这种情况 该应用程序是一个个人书签,因此它只需在最新的Chrome浏览器中工作。下面是一个完整的示例,用于在新选项卡上导航有效的URL HTML: JAVASCRIPT: function isValidURL(url)

使用javascript,我希望在不同的选项卡中打开一个新页面,但仍然关注当前选项卡。我知道我可以这样做:

open('http://example.com/');
focus();
然而,当我在chrome中执行此操作时,它会在切换回当前选项卡之前闪烁新选项卡片刻。我想避免这种情况


该应用程序是一个个人书签,因此它只需在最新的Chrome浏览器中工作。

下面是一个完整的示例,用于在新选项卡上导航有效的URL

HTML:

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

我还创建了一个带有解决方案的bin,据我记忆所及,这是由浏览器设置控制的。换句话说:用户可以选择是在后台还是前台打开新选项卡。他们还可以选择是在新标签页打开新的弹出窗口,还是只是。。。弹出窗口

例如,在firefox首选项中:


注意最后一个选项

我用一种非常简单的方式做了你想要的事情。它在谷歌浏览器和Opera中非常流畅,在Firefox和Safari中几乎完美。未在IE中测试


函数newTab(url)
{
var tab=窗口。打开(“”);
tab.document.write(“+document.getElementsByTagName(“html”)[0].innerHTML+”);
tab.document.close();
window.location.href=url;
}
小提琴:

说明:
假设有windows A1和B1以及网站A2和B2。
我没有在B1中打开B2然后返回A1,而是在A1中打开B2,然后在B1中重新打开A2。
(另一个让它工作的原因是我没有让用户重新下载A2,参见第4行)



你可能不喜欢的唯一一件事是新选项卡在主页之前打开。

更新:在Google Chrome的第41版中,
initMouseEvent
似乎由于@Daniel Andersson

这可以通过模拟动态生成的
a
元素上的
href
属性设置为所需的
url
来实现

正在运行:


此问题仅在chrome上测试!适用于所有流行浏览器:

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

尝尝these@jolly.exe谢谢,但是没有一个能避免在chrome中临时显示新页面。这个问题的解决方案似乎是使用chrome扩展api。@WillemJoosten感谢第一个真正实现了目标的答案。但是在扩展之外有什么方法可以做到这一点吗?它的好处是如此之小,以至于安装扩展所需的时间会超过它。可能是重复的谢谢,但我想你误解了我的问题。我希望开篇页面是最终关注的焦点,而不是新标签-问题是我如何避免在一瞬间显示新标签。从今天和最新的Chrome开始,这似乎没有任何作用。谢谢,但我希望我能从网站内部控制一些东西,因为我不希望这影响其他网站。(另外,ctrl/cmd+click也做同样的事情——我一直在使用它)这不是javascript,只是用于浏览器设置。谢谢,这是一个聪明的方法。但是,它有很多问题,包括关闭事件侦听器、不对齐浏览器历史记录、可能更改doctype以及丢弃html元素上的属性,更不用说它实际上没有“在其他选项卡中打开新页面”.为什么它不在其他选项卡中打开新页面?技术上,它在同一选项卡中打开新页面,在新选项卡中打开同一页面。我知道这只是语法问题——重要的是,这会将页面与其历史分离(断开后退按钮),并使chrome等更难跟踪选项卡层次结构。太棒了,我想我们已经做到了。不过有一个重要的注意事项:在OSX上,metaKey值必须为true。另一个注意事项:除非您将
a.target=''设置为空,否则这将不适用于具有锚文本的URL。这非常有帮助。你太棒了:这似乎已经停止与谷歌Chrome开发版本41.0.2224.0合作,发布于2014-11-20(在Linux上测试)。这并不奇怪,因为我猜这是“意外的功能”,但令人讨厌的是,我在本地应用程序中大量使用了它。Chrome的稳定通道和beta通道应该还没有受到影响,但可能很快就会合并更改。@maggot092使用
MouseEvent('click',{view:window,ctrlKey:true,metaKey:true}),新打开的选项卡仍然会窃取焦点。我遗漏了什么吗?来自MDN“不推荐使用此功能已从Web标准中删除。尽管某些浏览器可能仍支持此功能,但它正在被删除。请勿在旧项目或新项目中使用此功能。使用此功能的网页或Web应用程序可能随时中断。”
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;
    }
}
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;
}
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);
}
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();
}