Javascript在Firefox浏览器中使用window.open出现异常行为

3

我有几个链接,它们都应该在同一个窗口或选项卡中打开。 为了实现这一点,我给窗口起了一个名字,就像这个示例代码中的一样:

<a href="#" onClick='window.open("http://somesite.com", "mywindow", "");'>link 1</a>
<a href="#" onClick='window.open("http://someothersite.com", "mywindow", "");'>link 2</a>

这在Internet Explorer中可以正常工作,但Firefox总是会打开一个新的选项卡/窗口。有任何想法吗?
4个回答

14

实际上,由gabriel1836链接到的W3Schools文档仅是函数的非常简要摘要。

而且奇怪的是,Mozilla自己的开发者参考文献与此相矛盾

MDC / DOM / Window.open

var WindowObjectReference = window.open(strUrl, 
              strWindowName [, strWindowFeatures]); 
如果名为 strWindowName 的窗口已经存在,则加载 strUrl 到现有窗口中,而不是打开一个新窗口。在这种情况下,该方法的返回值是现有窗口,并且 strWindowFeatures 将被忽略。为strUrl提供空字符串是一种通过名称获取打开的窗口引用而不更改窗口位置的方法。如果您想在每次调用 window.open()时打开一个新窗口,则应使用 _blank 作为strWindowName 的特殊值。

但是,该页面还声明了许多可安装的扩展可以更改此行为。

因此,Mozilla为针对其自己的浏览器的人提供的文档可能有误或者您的测试系统存在某些问题:)

此外,当前的A-Href表示法对于网络来说不好,会使用户感到非常恼火。

  <a href="http://google.com"  
     onclick="window.open( this.href, 'windowName' ); return false" >
     Text
  </a>

有一种明显更好的方法可以解决这个问题。

很多人会本能地“中键单击”他们想要手动在新标签页中打开的链接,而你唯一的 href 设为 "#" 会让他们非常生气。

"#" 这个技巧是防止页面跳转到其他位置时冗余且不太好的技巧,但这只是因为缺乏如何使用 onclick 的理解。

如果从 on-click 事件中返回 FALSE,它将取消链接的默认操作(默认操作是将< strong>当前 页面导航到其他位置)。

比这种表示法更好的方法是使用不显眼的 JavaScript,如下所示:

 <a href="google.com" rel="external" >Text</a>

之后

 <script type="text/javascript">
 jQuery(function($){ 
        $("a[rel*=external]").click(function(){ 
            window.open(this.href, 'newWindowName' ); 
            return false; 
        });
 }); 
 </script>

8

Javascript中的window.open()函数专门用于打开一个新窗口,请参见: w3schools文档。实际上,听起来像是IE以非标准的方式处理事情(这并不奇怪)。

如果你想使用Javascript将现有位置重定向到一个新页面,你应该查看location.replace()函数location.replace()

一般而言,我建议您首先为Firefox开发,然后再为IE进行修复。Firefox不仅提供更好的开发工具,而且对W3C标准的实现往往更加正确。


你说得有道理,但通常只能这么说...因为如果你要实现自己的DOM处理,FireFox允许很多垃圾!-) - roenving
我在Firefox中开发,经常在Safari、Chrome和Opera中进行测试。然后交叉手指,在IE中修复问题。事实上,在任何单一浏览器中都可以逃脱太多的问题。 - Nosredna

6
默认情况下,如果在window.open参数中省略了尺寸,FF会使用新标签页。您需要为新的浏览器窗口添加尺寸。 请尝试以下操作:
<a href="#" onClick='window.open("http://somesite.com", "mywindow", "width=700", "height=500");'>link 1</a>

也谢谢我!我一直在想为什么它在IE中按预期工作,但在FF中总是新建一个选项卡... - m_pGladiator

2
为什么不直接使用纯HTML,例如:<a href="http://www.google.com" target="my_window_tab_frame_or_iframe">Link</a>,而不是使用JavaScript呢?请注意,保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接