嘗試修改 Vimium 來關閉網頁 pop-up
彈出視窗是以鍵盤瀏覽網頁的最大阻礙。這些視窗的內容不外乎會員邀請、推薦連結、蓋板廣告與網站公告等,是網站而定,通常沒辦法以 tab 來點擊,之前介紹的 Vimium 功能也沒辦法為這些視窗上的連結打標籤。由於彈出視窗並非廣告,所以下載 adblock 也無法阻擋之。所以往往只能乖乖移動滑鼠關閉之。
因為這些彈出視窗設計有別於html 內建的元素,所以有些更糟糕的案例是連關閉按鈕都沒有顯示在頁面上,強迫使用這點開網頁才能關閉之。
在得知 Vimium 點擊連結的方便之後,我嘗試修改 Vimium 的程式碼,讓他可以為原先沒辦法點擊的連結標註標籤
想法與策略
Vimium 能為網頁中可點擊的元素標註標籤,讓用戶得以用這些標籤的快捷鍵點開連結,不用經手滑鼠或用tab 遍歷。其原理是透過html元素,辨識可能可點擊的元素,例如連結、按鈕等。
然而,網頁中仍能有自訂元素,這些元素的名稱和行為未必與 html 原生元素一致,所以 Vimium 只能嘗試搜索可能可點擊的元素名稱,例如 buttom 或是 link,間接推論這些元素可點擊。不過實際的網頁往往不會使用這麼直白的名稱,可能使用縮寫或是帶好來命名這些元素,導致 vimium 無法標註這些元素。
讀了Vimium 介紹與支持 Plurk (噗浪)之後,覺得最直觀的想法是 修改 Vimium 程式碼的判斷式,看能不能找到彈出視窗共同的特徵,例如名稱、類別或是辨識碼等,拓展 Vimium 能辨識的元素,讓程式也能夠為彈出視窗標記快捷鍵。
不過這篇文章距今已十年,Vimium 也經歷多次改版,所以可能要找一下 github page 找到辨識網頁元素的區域在何處。所幸在這篇文章找到了一些參考。
我嘗試各大新聞網都失敗,只有知乎成功,因此以下會用知乎為例,說明要怎麼修改程式碼讓 Vimium 可以關閉彈出連結。
調查彈出視窗是否有共同的特徵
下一步是觀察彈出視窗的網頁元素的構建方式,歸納出彈出視窗的共通特徵,以便讓 Vimium 辨識。首先,在瀏覽器按 F12
開啟開發人員視窗來檢視網頁原始碼,接著於彈出視窗依序點擊右鍵和檢查,即可鎖定對應位置的網頁原始碼。
我檢查了幾個網站後發現,每個網頁的彈出視窗設計都不一樣,例如元素的組成、對應的滑鼠行為(e.g. hover or click),乃至於元素的 class 與 id 也因網頁而異。這意味著,也許沒有共通的值可以辨識這些自訂元素,只能針對常用的網頁來做修改。
下載擴充套件程式碼
下載擴充套件的方式可參考此文
- 安裝 Chrome extension source viewer
- 點開 Vimium 頁面
- 點擊 “Chrome extension source viewer”
- 點擊 “Download as zip”
修改程式碼並套用於瀏覽器
解壓縮後,接著點開,在這段加入
https://github.com/philc/vimium/blob/v1.67.4/content_scripts/link_hints.js#L987-L992
1 | if (!isClickable && className && className.toLowerCase().includes("zdi")) |
- 開啟 Chrome,點選工具列的擴充功能圖示
- 點選「管理擴充管理」
- 點選「載入未封裝項目」
- 重新整理頁面,查看是否順利修改
困難與限制
實作之後才發現,許多網站不是用 Html 既有物件來構建彈出視窗,而是自訂許多 class 與 id,再透過 Javascript 控制。這些自定義物件的行為由 Javascript 控制,每個網頁的命名、行為與能見度都不一樣,所以 Vimium 也無法一次搞定所有可能性。
換句話說,本文陳述的嘗試只適用於常用的網站,好比說常看的新聞網或社群論壇等,不能一勞永逸地克服所有彈出視窗。
結論
目前,彈出視窗仍是鍵盤瀏覽網頁的最大阻礙,原因是彈出是往往是自訂元素。,諸如 Vimium 等擴充套件也不易辨識多樣的自訂元素。鍵盤的可及性受限於網頁元素的設計共識,所以政府對於無障礙網頁設計才有相關的規範與建議吧。