1. 程式人生 > >History in Threads: 火狐外掛實現瀏覽歷史按主題顯示(樹)

History in Threads: 火狐外掛實現瀏覽歷史按主題顯示(樹)

History in Threads似乎是唯一一個業餘專案裡有確認使用者的. 大部分JavaScript原始碼(300+行)也用了中文命名.

外掛功能很簡單, 就是根據網頁點選順序生成樹, 每個樹可以認為是主題相關的. 比如, 從一個B搜尋頁A點開了其中一個頁面B, 顯示搜尋結果時B就是A的子節點(如下圖的"proglog nlp - 國內版 Bing"). 火狐瀏覽器對頁面點選順序的儲存維護好像比Chrome好一些. 生成的樹比較完整(相比Chrome版).

最新版的介面很簡陋(圖源自原始碼庫program-in-chinese/HistoryInThreads_WebExtension

):
2018_01_15_hit截圖
這個"新版"是由於火狐瀏覽器舊API失效被逼出來的(port to WebExtensions · Issue #6 · nobodxbodon/HistoryInThreads). 順便在主要演算法部分改用了中文命名:

  • 訪問緩衝表.js: 主要資料結構
  • utils.js: 所有不依賴於瀏覽器API的方法, 包括樹的生成, 搜尋時間處理, 根據關鍵詞高亮歷史記錄等等
  • history.js: 根據關鍵詞獲取所有可能相關的瀏覽歷史. 由於新版火狐API除去了根據多個URL獲取歷史記錄的功能(優化執行速度 · Issue #1 · program-in-chinese/HistoryInThreads_WebExtension
    ), 只好搜尋兩次, 一次按照(搜尋關鍵詞+歷史時間)搜尋, 一次只按照歷史時間搜尋(多搜了很多, 只好用上面的緩衝表避免每次搜尋時都搜幾萬項歷史記錄). 相關的部分程式碼如下:
var 按關鍵詞搜尋歷史 = function(關鍵詞, 歷史時間範圍) {
    計時("呼叫前")
    帶關鍵詞訪問記錄 = [];
    未處理url數 = 0;

    if (關鍵詞 != null) {
      當前關鍵詞 = 關鍵詞;
    }

    if (當前時間範圍 == null || !不需重新索引(歷史時間範圍, 當前時間範圍)) {
      無關鍵詞訪問記錄 =
[]; 訪問細節表 = {}; var 新回溯時間 = 取歷史回溯時間(歷史時間範圍); 歷史回溯時間 = 新回溯時間; 當前時間範圍 = 歷史時間範圍; // TODO: 如果先按關鍵詞搜尋, 如果沒有匹配, 可以省去搜索所有歷史 // 首先搜尋所有瀏覽歷史 var 無關鍵詞搜尋選項 = 生成搜尋選項('', 歷史回溯時間); var 無關鍵詞搜尋 = browser.history.search(無關鍵詞搜尋選項); 無關鍵詞搜尋.then(遍歷無關鍵詞歷史記錄); } else { var 帶關鍵詞搜尋選項 = 生成搜尋選項(當前關鍵詞, 歷史回溯時間); var 帶關鍵詞搜尋 = browser.history.search(帶關鍵詞搜尋選項); 帶關鍵詞搜尋.then(遍歷帶關鍵詞歷史記錄); } };

最近疏於外掛開發. 如有興趣參與, 歡迎聯絡.