新选项卡或窗口中的跨浏览器客户端重定向

时间:2011-08-16 08:08:27

标签: http browser cross-browser redirect

我们需要一种客户端重定向,我们唯一的选择是:

  1. window.location
  2. window.open
  3. HTTP 301,302,303回复
  4. window.location不支持在新标签页或窗口中打开目标位置。 (我认为这与browsing context

    有关

    window.open在Chrome中不起作用,似乎依赖于对浏览器进行的一些客户端配置,这使得它不太有利,因为我们无法控制它。

    HTTP重定向响应无法打开新的标签页或窗口,就像window.location一样。

    有什么想法吗?

1 个答案:

答案 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"的摆布,但它将是一个新窗口或一个新标签,它应该可以在任何地方使用......