Javascript window.open Firefox中的奇怪行为

nkr*_*1pt 3 javascript firefox

我有一些链接应该在同一个窗口或选项卡中打开.为了实现这一点,我给窗口一个名称,就像在这个示例代码中:

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

这在Internet Explorer中工作正常,但firefox总是打开一个新的选项卡/窗口.有任何想法吗?

Ken*_*ric 14

实际上,由gabriel1836链接的W3Schools文档只是一个非常简短的功能概述.

而且奇怪的是,mozilla自己的开发人员参考了CONTRADITCS这个逻辑.

MDC/DOM/Window.open

var WindowObjectReference = window.open(strUrl, 
              strWindowName [, strWindowFeatures]); 
Run Code Online (Sandbox Code Playgroud)

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

但是,该页面还指出可以安装许多可以更改此行为的扩展.

因此,mozilla提供的文档是针对他们自己的浏览器的人是错误的,或者你的测试系统有些奇怪:)

此外,您当前的A-Href表示法对网络不利,并会激怒用户.

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

这是一个非常好的方法.

许多人本能地"中间点击"他们想要在新标签中手动打开的链接,并且让你唯一的href作为"#"激怒他们堕落.

"#"技巧是一个冗余而且有点糟糕的技巧,可以阻止页面无意中到达某个地方,但这只是因为对如何使用缺乏了解 onclick

如果您FALSE从点击事件返回,它将取消链接默认操作(默认操作是导航当前页面)

甚至比这个表示法更好的是使用像这样的非侵入式javascript:

 <a href="google.com" rel="external" >Text</a>
Run Code Online (Sandbox Code Playgroud)

然后

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


Noa*_*ich 8

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

如果要使用Javascript将现有位置重定位到新页面,则应查看location.replace()函数.

一般来说,我建议你开发Firefox,然后修复IE.Firefox不仅提供了更好的开发工具,而且W3C标准的实现往往更加正确.

  • +1:"为Firefox开发然后修复IE" (3认同)

Dio*_*ane 6

默认情况下,如果在window.open参数上省略了维度,FF将使用新选项卡.您需要为新的浏览器窗口添加维度.

试试这个:

<a href="#" onClick='window.open("http://somesite.com", "mywindow", "width=700", "height=500");'>link 1</a>
Run Code Online (Sandbox Code Playgroud)