banner
陈不易

陈不易

没有技术想聊生活
twitter
medium
tg_channel

OL Search - 一個 Openlayers API 快速訪問擴展

為什麼#

openlayers 的 API 文件內容非常好,但使用起來卻有些困難。

一般查詢 API 的方式有以下兩種:

  • 搜尋引擎 👉 openlayers + 關鍵字 👉 打開指定連結
  • 打開 API 文件頁面 👉 搜尋關鍵字 👉 通過搜尋結果到達指定結果

OL 搜尋 1#

OL 搜尋是一款瀏覽器擴展(目前只上架了 Edge add-ons2),可以通過瀏覽器地址欄快速搜索 openlayers API,步驟如下:

  1. control+L 或者 cmd+L 進入搜尋欄。
  2. 輸入ol關鍵字,tab 或者 space 進入 OL 搜尋。
  3. 輸入目標 API(方法、成員變量、觸發器等)的關鍵字,選擇指定連結直達。

實現#

主要分三步:

解析 API 文件#

https://openlayers.org/en/latest/apidoc/navigation.tmpl.html

文件的導航欄部分嵌入了一個 HTML,來自上面的地址。
這裡本來有兩個思路。
一是通過修改 openlayers 自己的 api build 的腳本生成一組與上述 HTML 內容一致的 JSON 格式的 API 文件信息。
但考慮到兩點:

  • 後期維護問題,如果這麼做,每個小版本更新需要重新更新插件。
  • 插件體積變大。
    另一種是直接解析上面的 HTML 的導航信息文件,這裡遇到了問題,因為在瀏覽器的擴展中,backgroud.js 裡無法訪問 DOMParser 對象,這裡走了彎路,最開始曲線救國,通過 popup(點擊擴展圖標顯示的小彈窗)加載數據。這種方式缺點很明顯,用戶安裝完擴展後無法直接使用,需要點擊擴展圖標等待索引文件初始化後才能使用。之後找到了一個純 javascript 的 DOM 解析庫,才解決了該問題。

模糊搜索#

最開始的時候採用硬搜索,自己使用起來都不滿意,因為打字偶爾的 typo 不可避免,因此模糊搜索應該是剛需。
這裡參考了mdn-search 的做法,引入了 fuse.js 。也做了一些多關鍵字的增強。
比如在搜索 readFeatures 這個方法的時候,各種格式例如 EsriJSONKMLWKT 等都有 readFeatures 方法,而默認搜索結果 WKT 在後面,假如我想找 WKTreadFeatures 的話就會影響體驗。
通過 fuse.jssearch.$or,實現了多關鍵字的複合搜索。
這樣只需要輸入 readFeatures wkt 就可以將包含 WKT 的結果提到第一個候選。

幹掉默認推薦#

在監聽地址欄 omnibox 內容變化事件的回調函數中,瀏覽器默認會在你給的推薦結果前面默認加一條默認推薦,其內容是你鍵入的內容,指向的地址是你擴展的地址加上該內容。默認行為即 File not found
這部分思路來自rust-search-extension ,首先根據用戶的鍵入內容結合搜索結果,將默認推薦設置為原本的第二條結果(真正搜索結果的第一順位),之後在用戶回車後判斷該選項是否是默認建議,如果是,則指向真正搜索結果的第一順位的地址。

最後#

希望該工具給重度使用 openlayers API 文件的各位同仁帶來幫助。

Footnotes#

  1. OL 搜尋 repo: https://github.com/yuhangch/ol-search

  2. Edge Add-ons: https://microsoftedge.microsoft.com/addons/detail/ol-search/feooodhgjmplabaneabphdnbljlelgka

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。