沒穿方服

索引

顯示╱隱藏內文
顯示具有 Noise 標籤的文章。 顯示所有文章
顯示具有 Noise 標籤的文章。 顯示所有文章

這個新功能是什麼

就是古老 IE 每點一個連結,轉到新頁面時會「嗒」一聲的音效。

Noise 轉為 web extension 後就一直沒做這功能,因為時機太難判斷,之前用 webRequest + webNavigation + History API 怎麼配都弄不好,尤其在一些 SPA 或嵌入很多廣告的網頁,會發瘋叫個不停。

直到 Firefox 147 支援 Navigation API,雖然使用情境仍複雜,但有比較清楚的介面定義,至少能安心實作。

「Navigate」的中文翻譯

另一個難題是 navigate 中文要翻成什麼。

一般翻成「瀏覽」、「導覽」,或「導航」,但缺乏上下文時都太曖昧。

參考 Windows 翻譯(檔案總管用的,IE 概念上就是 explorer 的延伸,所以音效也一樣)是用「開始瀏覽」和「導覽開始」,其實也看不懂。

Win 10 系統音效中的「開始瀏覽」

Firefox DevTools 的翻譯是「導航」:

Firefox 147 DevTools「主控台」面板訊息

我最後使用「瀏覽導航」,作為事件選項之一感覺還可以。

Navigate 具體發生時機

應用樣態多元,所以使用者其實不太能預期發生時機。

不如現在就安裝 Noise,搭配不同 navigationType 設定不同音效,在日常生活中慢慢認識它。

Noise 4.3 選項畫面「瀏覽導航」例子

示例(影片有聲音)

Noise 4.2.0 新功能「Multiple Sounds」

可以在事件上綁定「多個」聲音,可選擇是否隨機播放。

安裝 Noise:

註:套件裡面「沒有提供」影片中的聲音檔,要自己去生喔。

開啟方式

  1. 確認 Firefox 版本在 135.0 以上(2025/2/4 釋出)
  2. 進入 about:config,找出 accessibility.typeaheadfind.wrappedSoundURL, 改成「beep」或一個指向 wav 檔案的 file:// URI(例如 file:///C:/%E9%9F%B3%E6%95%88/dorya.wav)即可

說明

Ctrl + F 文字尋找功能「已達頁尾,從頁首重新搜尋」這個狀態叫做 wrapped,目前各瀏覽器處理 wrap 的行為大致一樣,就是直接跳到另一端,缺點是不容易注意到。 相關討論 20 年前就存在,例如:

增加音效或許不是完善解方,但在很多情況下也夠用了。

可以用的值

新增的 accessibility.typeaheadfind.wrappedSoundURL 設定和 Accessibility.typeaheadfind.soundURL 類似,具體可用的值為:

  • 空字串(預設值)
    不會出聲,跟舊版行為相同
  • 字串 beep
    發出系統嗶聲,跟舊版「找不到指定文字」的音效相同
  • 字串 default
    發出古代 Firefox 的預設音效,很像屁聲,這不是我亂加的,是原始行為
  • 指向 WAV 聲音檔的路徑
    因為底層是用 nsISound 實作所以只支援 wav。 格式必須是 file URI,也就是以 file:// 開頭,不確定的話可以把音檔拖進瀏覽器,再複製網址列的文字即可

這個功能我等了七年

其實最早在 2008 年寫的擴充元件 Noise 裡就有實作這個功能,但隨著 Firefox 57(2017/11/14)改變架構讓 XPCOM 套件全滅,接下來就一直沒有替代方案,在長文研究時真的很痛苦。

2024 六月處理了一個 findbar bug,其實也是為這個音效做準備,這次一個 commit 就結案,只是等待 review 推進也是拖了一個月。

收到使用者對 Noise 的問題

為了等待某個詞的出現,我讓一個討論區,請一個外掛,不停地、不停地重讀。
假如能夠 find 到那個詞時,發出聲音通知我,

我就可以同時做別的事了。

解決辦法,在 Noise 設定這個聲音

DOMContentLoaded&gBrowser.contentWindow.find('WORD_I_CARE')

(事件類型是 window event)

每次 DOM 讀完後,便自動進行尋找(Ctrl + F),若有找到就發出聲音。

實際上要加入網址限制,免得每個網站都自動尋找:

DOMContentLoaded&(event.target.location.host==='www.forum.com'&&gBrowser.contentWindow.find('WORD_I_CARE'))

除了 host,也有其他屬性可用來設限制,參考 window.location (#properties) - MDC Doc Center

設定畫面

Firefox 套件 Noise 今天終於過了 AMO 的審核,主要瑕疵是全域變數沒藏好,白白拖延不少時間。

  1. 2008-10-20 送審,2009-03-27 被退 —— 等了 5 個月。
  2. 2009-03-29 修正並發新版,2009-04-07 第二次送審,2009-06-11 批准公開 —— 等了 2 個月。

中文的 AMO 真順眼

給也在排隊的朋友參考:其間作者只在 AMO 放新版、修改審核註解(昨天又改了一次,也許是關鍵?)此外就什麼也沒做了。

※想瞭解要審核哪些項目,可參考 AMO blog 的 Successfully Getting your Addon Reviewed


選項視窗

順便介紹此套件用途:

  • 安裝後,預設有 20 幾個事件可以改音效(需要 .wav 檔),例如:
    • 尋找已達頁尾/頁首 - 尋找(Ctrl + F)到底的時候叫一聲
    • 提示通知 - 下載完成、找到新元件等,右下角跳出通知的時候叫一聲
    • 瀏覽開始 - 大致上每點一個鏈結就嗶一下的噪音
    • 啟動視窗就緒 - Firefox 啟動還真慢,開好叫我
  • 編輯視窗

    如果預設的不夠,就比較麻煩了,請見 事件參考 表格,手動加入需要的項目,例如:
    • 資訊列通知 - 記住密碼、擋彈出廣告之類的通知,出現時叫一聲
    • 複製 - 複製的時候叫一聲,可以幫助鑑別按到了 Ctrl + C 還是 Ctrl + V
  • 如果是進階使用者,還可試試 事件過濾 功能,在偵測事件之餘,繼續檢驗是否滿足自訂條件,是的話才發聲。甚至用此功能捕捉特定事件,然後做你想做的事;
    例如設定 dblclick&event.button=='2'&&!gFindBar.hidden&&(gFindBar.close()||true) 會在連按兩下右鍵之後,把尋找列關掉。

總之這個套件不是只有「重現 ie 點鏈結答答聲」用的啦,我還覺得那個跟滑鼠滾輪喀喀喀一樣煩人勒。

下面是附加元件 Noise 的使用例。套用 ACQUIRE 遊戲的音效,算是湊個 theme 吧。
※播放中覺得吵是正常的,因為真的有點吵……

YouTube - Firefox 聲音主題 - ACQUIRE Noise (add-on: Noise)

這份設定檔也放在 noise_theme_acquire_rdf.7z (DivShare)——僅 RDF,不分享聲音檔。