Mar*_*ark 1941 javascript
我试图在新选项卡中打开一个URL,而不是弹出窗口.我已经看到相关的问题,其中的回答看起来像:
window.open(url,'_blank');
window.open(url);
Run Code Online (Sandbox Code Playgroud)
但是它们都没有为我工作,浏览器仍然试图打开一个弹出窗口.
Rin*_*rge 1604
这是一招,
function openInNewTab(url) {
var win = window.open(url, '_blank');
win.focus();
}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,这应该直接在onclick
链接的处理程序中发生,以防止弹出窗口阻止程序和默认的"新窗口"行为.您可以这样做,或者通过向DOM
对象添加事件侦听器.
<div onclick="openInNewTab('www.test.com');">Something To Click On</div>
Run Code Online (Sandbox Code Playgroud)
http://www.tutsplanet.com/open-url-new-tab-using-javascript/
Que*_*tin 851
作者无法做的任何事情都可以选择在新选项卡中打开而不是在新窗口中打开.这是用户偏好.
CSS3提出了target-new,但规范被放弃了.
的反向是不正确的; 通过在第三个参数中指定窗口的尺寸window.open()
,可以在首选项用于选项卡时触发新窗口.
Ven*_*tra 360
window.open()
如果在实际点击事件中没有发生,则不会在新标签中打开.在给定的示例中,URL正在实际的单击事件上打开.如果用户在浏览器中有适当的设置,这将起作用.
<a class="link">Link</a>
<script type="text/javascript">
$("a.link").on("click",function(){
window.open('www.yourdomain.com','_blank');
});
</script>
Run Code Online (Sandbox Code Playgroud)
同样,如果您尝试在click函数中执行Ajax调用并希望在成功时打开一个窗口,请确保使用async : false
选项set 进行Ajax调用.
小智 244
window.open
无法在所有浏览器的新选项卡中可靠地打开弹出窗口不同的浏览器 window.open
以不同的方式实现行为,尤其是关于用户的浏览器偏好.您不能指望window.open
在所有Internet Explorer,Firefox和Chrome中都存在相同的行为,因为它们处理用户的浏览器首选项的方式不同.
例如,Internet Explorer(11)用户可以选择在新窗口或新选项卡中打开弹出窗口,您无法强制Internet Explorer 11用户以某种方式打开弹出窗口 window.open
,如Quentin的答案所暗示的那样.
至于Firefox(29)用户,使用window.open(url, '_blank')
取决于他们的浏览器选项卡首选项,但您仍然可以强制他们通过指定宽度和高度在新窗口中打开弹出窗口(请参阅下面的"关于Chrome的内容?"部分).
转到浏览器的设置并将其配置为在新窗口中打开弹出窗口.
如上所示,在设置Internet Explorer(11)以在新窗口中打开弹出窗口后,使用以下测试页面进行测试window.open
:
<!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>
Run Code Online (Sandbox Code Playgroud)
观察弹出窗口是在新窗口中打开的,而不是新选项卡.
您还可以在Firefox(29)中测试上面的片段,并将其选项卡首选项设置为新窗口,并查看相同的结果.
window.open
从Internet Explorer(11)和Firefox(29)实现不同.我不是百分百肯定,但看起来Chrome(版本34.0.1847.131 m
)似乎没有任何设置可供用户选择是否在新窗口或新标签中打开弹出窗口(如Firefox和Internet Explorer)有).我检查了Chrome文档以管理弹出窗口,但它没有提及任何有关此类事情的内容.
此外,不同的浏览器似乎再次实现 window.open
不同的行为.在Chrome和Firefox中,指定宽度和高度将强制弹出窗口,即使用户已将Firefox(29)设置为在新选项卡中打开新窗口(如在新窗口中打开JavaScript的答案中所述,而不是制表符) :
<!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>
Run Code Online (Sandbox Code Playgroud)
但是,如果用户将标签设置为浏览器首选项,则上面的相同代码段将始终在Internet Explorer 11中打开新标签,即使指定宽度和高度也不会强制为其弹出新窗口.
因此window.open
,Chrome中的行为似乎是在onclick
事件中使用时在新选项卡中打开弹出窗口,从浏览器控制台使用时在新窗口中打开它们(如其他人所述),并在新窗口中打开它们以宽度和高度指定.
不同的浏览器 window.open
针对用户的浏览器偏好实现不同的行为.您不能指望window.open
在所有Internet Explorer,Firefox和Chrome中都存在相同的行为,因为它们处理用户的浏览器首选项的方式不同.
pie*_*e6k 214
一个班轮:
Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
Run Code Online (Sandbox Code Playgroud)
它创建一个虚拟a
元素,然后target="_blank"
在新标签页中打开它,使其正确url
href
,然后单击它.
如果你愿意,基于此你可以创建一些功能:
function openInNewTab(href) {
Object.assign(document.createElement('a'), {
target: '_blank',
href,
}).click();
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用它像:
openInNewTab("http://google.com");
Run Code Online (Sandbox Code Playgroud)
Moh*_*eer 79
如果您使用window.open(url, '_blank')
,它将在Chrome上被阻止(弹出窗口拦截器).
试试这个:
//With JQuery
$('#myButton').click(function () {
var redirectWindow = window.open('http://google.com', '_blank');
redirectWindow.location;
});
Run Code Online (Sandbox Code Playgroud)
ari*_*kfr 60
为了详细说明斯蒂芬斯皮尔伯格的答案,我在这种情况下这样做了:
$('a').click(function() {
$(this).attr('target', '_blank');
});
Run Code Online (Sandbox Code Playgroud)
这样,就在浏览器将跟随我设置目标属性的链接之前,所以它将在新的选项卡或窗口中打开链接(取决于用户的设置).
小智 33
我使用以下,它运作良好!
window.open(url, '_blank').focus();
Run Code Online (Sandbox Code Playgroud)
kar*_*una 18
一个有趣的事实是,如果用户未调用操作(单击按钮或某物)或者它是异步的,则无法打开新选项卡,例如,这不会在新选项卡中打开:
$.ajax({
url: "url",
type: "POST",
success: function() {
window.open('url', '_blank');
}
});
Run Code Online (Sandbox Code Playgroud)
但这可能会在新选项卡中打开,具体取决于浏览器设置:
$.ajax({
url: "url",
type: "POST",
async: false,
success: function() {
window.open('url', '_blank');
}
});
Run Code Online (Sandbox Code Playgroud)
Man*_*nyC 12
只是省略[strWindowFeatures]参数将打开一个新选项卡,除非浏览器设置覆盖(浏览器设置胜过JavaScript).
var myWin = window.open(strUrl, strWindowName, [strWindowFeatures]);
Run Code Online (Sandbox Code Playgroud)
var myWin = window.open(strUrl, strWindowName);
Run Code Online (Sandbox Code Playgroud)
- 要么 -
var myWin = window.open(strUrl);
Run Code Online (Sandbox Code Playgroud)
att*_*ian 11
是否在新标签页或新窗口中打开 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');
});
Run Code Online (Sandbox Code Playgroud)
但是,如果您尝试从 AJAX 请求回调打开一个新选项卡,浏览器将阻止它,因为它不是直接的用户操作。
要绕过弹出窗口阻止程序并从回调中打开一个新选项卡,这里有一个小技巧:
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();
});
});
Run Code Online (Sandbox Code Playgroud)
spi*_*mir 10
(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')))
Run Code Online (Sandbox Code Playgroud)
Cod*_*nja 10
你可以用一个技巧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();
}
Run Code Online (Sandbox Code Playgroud)
Pre*_*vic 10
不要使用目标=“_blank”
在我的例子中,始终为该窗口使用特定的名称meaningfulName
。在这种情况下,您可以节省处理器资源:
button.addEventListener('click', () => {
window.open('https://google.com', 'meaningfulName')
})
Run Code Online (Sandbox Code Playgroud)
这样,例如,当您单击某个按钮 10 次时,浏览器将始终在一个新选项卡中重新呈现它,而不是在 10 个不同的选项卡中打开它,这会消耗更多资源。
您可以在MDN上阅读更多相关内容。
如果您尝试从自定义功能打开新选项卡,这与浏览器设置无关.
在此页面中,打开JavaScript控制台并键入:
document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").click();
Run Code Online (Sandbox Code Playgroud)
并且无论您的设置如何,它都会尝试打开弹出窗口,因为"点击"来自自定义操作.
为了表现得像链接上的实际"鼠标点击",你需要遵循@spirinvladimir的建议并真正创建它:
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'))));
Run Code Online (Sandbox Code Playgroud)
这是一个完整的例子(不要在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>
Run Code Online (Sandbox Code Playgroud)
function openTab(url) {
const link = document.createElement('a');
link.href = url;
link.target = '_blank';
document.body.appendChild(link);
link.click();
link.remove();
}
Run Code Online (Sandbox Code Playgroud)
$('<a />',{'href': url, 'target': '_blank'}).get(0).click();
Run Code Online (Sandbox Code Playgroud)
Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
Run Code Online (Sandbox Code Playgroud)
要打开新选项卡并停留在同一位置,您可以在新选项卡中打开当前页面,并将旧选项卡重定向到新 URL。
let newUrl = 'http://example.com';
let currentUrl = window.location.href;
window.open(currentUrl , '_blank'); // Open window with the URL of the current page
location.href = newUrl; // Redirect the previous window to the new URL
Run Code Online (Sandbox Code Playgroud)
浏览器将自动将您移至新打开的选项卡。看起来您的页面已重新加载,并且您将停留在同一页面上,但在一个新窗口上:
归档时间: |
|
查看次数: |
2402930 次 |
最近记录: |