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