[Firefox] 禁止火狐浏览器偶尔会弹新窗口打开链接
这篇文章说了很多胡扯的“废话”,不想看的可以直接翻到后面看解决方案。
胡扯
我一直用火狐浏览器,也一直很喜欢这个浏览器。从大概2008年开始,发现它的多标签浏览功能比IE6的多窗口浏览模式用起来更加自然之后,就一直用到现在。 不离不弃,磨合了已经长达11年之久。I ♥︎ Firefox。
最近,我忍了很久的一个BUG(或者不足)开始影响到了我的工作,所以我决定解决它。不过,先从一些小事儿说起。
以前做公司内的技术分享的时候要么是用 PPT 要么是用 KeyNote。这两个软件都是本地安装运行的,PPT 安装麻烦、重量级;KeyNote 是 macOS 自带的,但是,也只有苹果自家的产品能打开它。 PPT 可以在 macOS 上打开、KeyNote 可以导出为 PPT,但是,这两种方式都会出现排版错误,影响阅读。
然而,鉴于我越来越爱使用网页产品(因为其便捷性)代替客户端产品,所以我决定抛弃以上两者。它们两者的兼容性再好,我觉得都不可能和浏览器相提并论。 现在的硬件能力,足以使得浏览器在各种端设备上表现一致。最关键的一点是,网页分享简直太方便了啊,只需要一个链接即可!还可以共同编辑!,这些才是杀手锏。
再扯远一点,自己我从2017年初开始把工作环境从 Windows 切换到 macOS 上来说,我就放弃了很多。 我在 Windows 上工作这么多年的“成果/作品”,绝大多数都无法在其它平台运行。所以当我转到 macOS 时,我几乎从“零”开始。 而几乎在同一时期,我开始爱上了写服务器程序,越来越多的应用呈现在了网页上(虽然很多都是不对外的)。
好了,以上就是一些小事儿。
我所在的外企公司使用的办公套件是 G Suite,简单说就是 Google 的网页端软件全家桶。 既然是办公套件,自然文字处理(Google Docs)、表格处理(Google Sheets)、幻灯片(Google Slides)都是必不可少的。
最近开始用 Google Slides 做 ElasticSearch 搜索引擎 的技术分享。发现 Google Slides 的全屏功能在 Firefox 工作得有点古怪(weird)。 当我点击“播放”按钮准备全屏演示时,它弹出了一个“简陋”的新窗口,点击屏幕正文的“全屏”时,它更是进入到一个“带奇怪边框”的全屏模式,实在太丑了,无法跟同事继续分享。
插一段:我记得早期在IE上时,经常会出现这种“定制化”的浏览器窗口,这种窗口可以没有地址栏,没有菜单、没有工具栏,没有前进后退啥的,具体不记得是个什么特性了。有些人提到是 Script Window / Popup Window。不去溯源了。 并且,早期的时候是没有“标签(TAB)”这种说法的,点击一个,打开的就是一个新的浏览器窗口。
其它的 Google 产品并不是没有出现过这样的问题(它们在 Google 自家的 Chrome 上工作得良好,原因就不猜测了)。比如:Google 弹出的登录窗口比例有问题(缩小到一半)。只是没有影响太多,所以我选择性无视它们了。
好了,终于到了该说解决办法的时候了。
解决办法
Firefox 提供了一个可以彻底禁止在新窗口打开链接窗口(包含脚本打开的)的方式(手动的不算)。启用方式如下:
在地址栏输入about:config
进入参数配置界面,然后在搜索处输入newwindow
,会列出关于创建新窗口的一些参数配置。
注意修改以下几个值的设置。
(A) browser.link.open_newwindow - 对于标签内的链接
- 3 = 在新标签中打开链接,而不是新窗口中(默认)
- 2 = 在新窗口中打开链接(类似
target="_blank"
) - 1 = 强制在当前标签中打开链接(
target="_blank"
的也不例外,将类似target="_top"
)
如果不是默认值,请设置成默认值(右键菜单:重置)。
(B) browser.link.open_newwindow.restriction - 对于标签内的链接
- 0 = 把 (A) 设置应用到所有的新窗口(即便是脚本窗口(Script Window))
- 2 = 把 (A) 设置应用到普通窗口而非脚本窗口(即便是特性窗口)(默认)
- 1 = 覆盖掉 (A) 设置,并始终在新窗口中打开链接
好了,这就是关键了:把这个参数的值修改为:0
!
(C) browser.link.open_newwindow.override.external - 外部程序打开的链接
- -1 = 把 (A) 设置应用到外部链接(默认)
- 3 = 在最近活动的窗口中打开外部链接
- 2 = 在新窗口在打开外部链接
- 1 = 在最近活动的窗口中最近活动的标签中打开外部链接
如果不是默认值,请设置成默认值。
好了,完工!