我们需要一种客户端重定向,我们唯一的选择是:
window.location
window.open
window.location不支持在新标签页或窗口中打开目标位置。 (我认为这与browsing context)
有关window.open在Chrome中不起作用,似乎依赖于对浏览器进行的一些客户端配置,这使得它不太有利,因为我们无法控制它。
HTTP重定向响应无法打开新的标签页或窗口,就像window.location
一样。
有什么想法吗?
答案 0 :(得分:4)
昨晚玩了好几个小时之后,今天早上我获得了一些灵感,我刚刚在FF3,Chrome,IE7和IE8中测试了这个解决方案 - 它有点hacky但它适用于所有。
<html>
<head>
<title>Redirect in a new window</title>
<script type="text/javascript">
function doIt () {
var form = document.createElement('form');
form.action = 'http://www.google.com/';
form.target = '_blank';
document.getElementById('hidden_div').appendChild(form);
form.submit();
}
</script>
<style>
#hidden_div {
display: none;
}
</style>
</head>
<body>
<div>
This is my page content<br />
<a href="http://www.google.com/">This is a link to Google</a>...<br />
...and this button will open Google in a new tab or window: <input type="button" value="Click Me!" onclick="doIt();" />
</div>
<div id="hidden_div"></div>
</body>
</html>
你的页面上需要一个隐藏的<div>
,你可以在JS中获得引用(没什么大不了的 - 只需用display: none
创建一个。)
如果要进行重定向,请使用document.createElement()
创建新的<form>
元素,将其action
属性分配给您要将用户带到的页面的地址,并根据需要为其指定target
属性(我在上面的示例中使用了_blank
)。然后,只需将其附加到隐藏的<div>
并将其称为submit()
方法。
嘿,您的重定向会在新窗口/标签页中打开!
不幸的是,你仍然会受到用户如何配置浏览器以处理target="_blank"
的摆布,但它将是一个新窗口或一个新标签,它应该可以在任何地方使用......