Skip to content

Switch to Firefox

Previous

大学刚用电脑时,估计用了半年的IE(和Windows),后来转Ubuntu后,自然就是Firefox。 没多久Google Chrome出来了,印象最深大概就是这个漫画,当时真是耳目一新, 从此简洁的风格风靡各大浏览器,最明显就是地址栏和搜索栏放到一起并占据显要位置。

后来就是尽管Chrome不崩溃了(当然这个锅主要是IE的),然而内存耗用却越来越大,再加上Chrome是基于Chromium开发, 感觉没有Firefox活跃(估计我主要被每天推送mozilla blogmozila hacks的文章而这么觉得)。 去年年末Mozilla开始大肆宣传Quantum新版本,什么Off-Main-Thread Painting,新的CSS引擎Stylo,Webassembly Streaming Compiler,以及用Rust写的WebRender等等, 我就自然重回Firefox的怀抱了。

Migration

Switching from Chrome to Firefox, 最重要是第一步,等把配置导入完了再删Chrome。

数据主要就是history和bookmark了,密码目前我是lastpass管理,Chrome那边还留了冷备。 具体密码管理见Password Manager

迁移具体过程也是无痛,如这儿所说,Switching over to Firefox Quantum was relatively painless,当然我对UI改变基本无感,即使有,也能通过自定义解决。

Add-ons

这个两年前Mozilla就说要迁移到类似Chrome的Web Extension,放弃旧的XUL体系,My new worry about Firefox 56 and the addons that I care about。 那篇博文的作者也列出了自己的插件, My current set of Firefox Quantum (57+) addonsThe addons that I would likely use with Firefox Quantum (57+)

我以前印象比较深刻的就两个,一个是DownThemAll!,另外一个是AutoProxy,总之记得logo上有一个福字。当然现在各种原因都没法用了~

现在主要用的插件有:

  1. Last Password 密码管理,但Android版本不可用(LastPass quietly deprecates Firefox for Android extensionCan't use LastPass/Bitwarden with Firefox for Android anymore ?!
  2. Firefox Multi-Account Containers 基本就是你可以把各个网站分组隔离开来,superuser上有个类似的问题Open Link in different Profile in Firefox
  3. Vimium 以前用Vimperator,后来用Chrome也有,迁移到Firefox时发现也出了不稳定版。
  4. Adblock Plus 广告屏蔽,流行必备装备。

自从发现了Firefox Multi-Account Containers这个好东西后,就想着官方是否还有其他精品, 写了个脚本发现官方出品extension总共也没几个...

firefox-addon.py
import random
import datetime
import requests
import jwt
JWT_ISSUER = 'user:xxxxxxx:xx'
JWT_SECRET = 'xxx'

def main():
    url = 'https://addons.mozilla.org/api/v3/addons/search/'
    while True:
        payload = {
            'iss': JWT_ISSUER,
            'jti': f'{random.random()}',
            'iat': datetime.datetime.utcnow(),
            'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=50)
        }
        encoded = jwt.encode(payload, JWT_SECRET, algorithm='HS256')
        resp = requests.get(url, params={'author': 'mozilla'}, headers={'Authorization': f'JWT {encoded}'})
        for item in resp.json().get('results'):
            name = item.get('name', {}).get('en-US', '')
            type_ = item.get('type')
            # http://addons-server.readthedocs.io/en/latest/topics/api/addons.html#addon-detail-type
            if type_ == 'extension':
                print(name, item.get('url'))
        if not resp.json().get('next'):
            break
        url = resp.json().get('next')


if __name__ == '__main__':
    main()

当然,有时你会发现某些插件无法删除,请服用Cannot remove an add-on (extension or theme)

Chrome Mod

首先这个tab方块没法忍,发现有人跟我一样,photon-australis

打开 about:support 或者 about:profiles 查找 Profile Folder 或者 Root Directory 的位置, 比如我的MacOS上是 $HOME/Library/Application Support/Firefox/Profiles/xxxx.default,把Git仓库代码(我选择的是Default主题)拷贝到 chrome/userChrome.css 里就好。

Reader View非常适合阅读,但是默认宽度太窄,可以按照如下修改。

$ cat chrome/userContent.css
/* selectors are from aboutReader.css */
.container.content-width7 {
  max-width: 48em !important;
}

.container.content-width8 {
  max-width: 48em !important;
}

.container.content-width9 {
  max-width: 48em !important;
}

Sync

  1. Google shuts off Chrome Sync API for third-party browsers on Android, citing a security vulnerability
  2. Is there an API to access Chrome Sync data
  3. HELP : Firefox Sync with SSL
  4. For the Paranoids: Install Your Own Firefox Sync Server
  5. User Services/Sync/SetupSyncNext, CloudServices/Sync/Client Log Debugging
  6. about:sync-log missing in android firefox
$ # adb shell setprop log.tag.FxAccounts DEBUG
$ adb logcat -s FxAccounts
05-28 22:39:47.538 I/FxAccounts( 6982): firefox :: FirefoxAccounts :: Requesting sync.
05-28 22:39:47.539 I/FxAccounts( 6982): firefox :: FirefoxAccounts :: Sync options -- scheduling now: true
05-28 22:39:47.540 I FxAccounts( 6982): firefox :: FxAccountSyncAdapter :: Not syncing FxAccount XXXXXXXX@XXXXX.XXX: minimum interval not met.

为了安全着想,我还是不自建Sync。 我不喜欢的 Firefox 同步

About Protocol

Firefox and the "about" protocol

  1. about:about
  2. about:networking
  3. about:sync-log

不像Chrome,可以直接进chrome://net-internals#dns直接Clear host cache,Firefox则需要修改config,Firefox invalidate dns cache

Configuration

Firefox configuration hardening Firefox作为互联网先锋,当然少不了,A history of Fingerprinting protection in Firefox。 更高级的设置,可以参考 Firefox Configuration Guide for Privacy Freaks and Performance Buffs,我就暂时打住,不然这嵌套一层层调用下去会无休止。

AutoConfig

DoH & Network

Firefox, DNS over HTTPS and a controversial Shield Study
DoH引发panic/crash的相关bug: #1450583, #1450630[,#1441131

$ cat prefs.js |grep network.trr
user_pref("network.trr.mode", 3); // 2
user_pref("network.trr.uri", "https://example.com/dns-query"); // https://mozilla.cloudflare-dns.com/dns-query

#user_pref("network.trr.bootstrapAddress", "x.x.x.x");
user_pref("network.trr.blacklist-duration", 300);

$ cat prefs.js |grep network.proxy
user_pref("network.proxy.autoconfig_url", "https://example.com/a");
user_pref("network.proxy.type", 2);

Ad-blocking

Adblock Plus filters explained

  1. network.http.sendRefererHeader
  2. privacy.resistFingerprinting

在页面输入框右键可以添加搜索

  1. Add custom search engine, github
  2. How to Add Any Search Engine to Your Web Browser
  3. Add custom search engines to Firefox
  4. Manage my default search engines in Firefox for Android

Translation

当然就没有Chrome那种自动检测语言提示翻译了。

  1. Firefox built-in translation not working
  2. Mozilla working on Google Translate integration in Firefox
  3. How to add translate feature to Firefox Mozilla to use Microsoft Translator for Translations in Firefox

最后我使用的是Google Translator for Firefox

Comparison

  1. 查看CPU/内存使用没有Chrome那么方便,只能去 about:memory 里dump,组织还比较不清晰,哪个Tab消耗多少CPU内存没法一眼看出来。
  2. 内置的截图功能非常赞,堪比锤子手机上的滚动截图(话说Android P好像也要集成截图编辑功能了)。
  3. Tab同步功能跟Chrome一样好用,开始以为firefox不至于被🦀,但是没想到祖国的关心无处不在。
  4. 相比Chrome,Firefox移动端没有整页自动翻译了,这个有时看到日文或者俄文的只能单独处理了。
  5. Chrome移动端会提示启用Mobile Friendly View,但是Firefox Android可以启用Reader View,不过效果差不多。 1

FAQ

  1. 发现Google Voice页面一直加载失败,Not loading on Firefox, 需要启用 media.peerconnection.enabled 。
  2. 每次从Firefox里拷贝出来的URL如果带有Unicode字符就被转义了,变成一大长串%号, How do I copy hyperlinks in non-encoded format in Firefox? [duplicate],修改browser.urlbar.decodeURLsOnCopy 为false。
  3. delete auto complete entry

Known Issues

  1. #868370 无法导入客户端证书,只能启个web server,设置正确的MIME type
  2. #1443259 FoxyProxy 无法支持PAC文件。
  3. How to open Links (e.g. YouTube, Autoscout) in native App instead of browser??
  4. Firefox screenshot node viewport only,例如截图outlook web页面中的邮件。

Comments