但要自訂 Firefox 的搜尋器比 Chromium 稍微麻煩一點
不能直接在 搜尋 分頁中增加搜尋器,那麼 Firefox 應該如何增加搜尋器?
Firefox 使用 開放搜尋格式 (OpenSearch Format)
匯入 開放搜尋格式 的 描述檔案 的 搜尋引擎 及 搜尋參數 於對應的 網站顯示結果
開放搜尋格式
開放搜尋格式 是一種 XML格式,內容亦只是數個 XML標籤及屬性 來定義從網站新增
普遍具備搜尋設計的網站,都可以直接從 Firefox 搜尋列中新增搜尋器
但偶然有搜尋設計的網站,不能直接從 Firefox 搜尋列中新增搜尋器
例如在 Blogspot 雖然有搜尋功能,但不能直接加入到 Firefox 的搜尋引擎清單
因此需要自行編寫 開放搜尋檔案,便需要自行編寫 開放搜尋格式 的檔案
<?xml version="1.0" encoding="UTF-8"?> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <ShortName>Search Engine Name, required</ShortName> <Description>Search Engine Description, optional</Description> <InputEncoding>Text encoding, optional, default UTF-8</InputEncoding> <Image width="32" height="32" type="image/png">Image URL or base64 encoded text, optional</Image> <Url type="text/html" method="GET" template="search-url"> <Param name="q" value="{searchTerms}"/> </Url> </OpenSearchDescription>
- ShortName 搜尋器名稱,必須
- Description 搜尋器描述,選擇性
- InputEncoding 輸入編碼,選擇性,預設 UTF-8
- Image 搜尋器圖案,支持 上限 10KB 容量,base64 編碼,選擇性
- width 圖案闊度,支援像素範圍為 1~1024
- height 圖案高度,支援像素範圍為 1~1024
- type 圖案類型,支援格式與 HTML 的 favicon 相同,通常為
- image/svg+xml
- image/png
- image/x-icon
- image/vnd.microsoft.icon
- Url 搜尋器連結,必須
- type 搜尋器類型,通常為 text/html
- method HTTP請求方法,通常使用 GET 及 POST
- template 搜尋器範本,通常為網頁連結
- Param 搜尋參數,使用 GET ,可以在範本的連結後直接加上;使用 POST 必須使用 Param標籤
- name 請求參數的名稱
- value 請求參數的資料
- {searchTerms} 搜尋字串,當符合 {searchTerms} 會當作傳入文字作為搜尋字串
- Param 搜尋參數,使用 GET ,可以在範本的連結後直接加上;使用 POST 必須使用 Param標籤
使用 GET 方法時,可以減略使用 Param 標籤,直接以 URL參數 傳入資料亦可
<Url type="text/html" method="GET" template="search-url?q={searchTerms}"/>兩種語法各有好壞,在下偏好使用 Param標籤,可以讓參數較易閱讀,但檔案容量則會較大
例如在下製作方便搜尋在下的 Blogspot 的 開放搜尋格式 的檔案
<?xml version="1.0" encoding="UTF-8"?> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <ShortName>HKGoldenMr.A's Blog</ShortName> <Description>HKGoldenMr.A's Blog</Description> <Tags>blog</Tags> <Image width="32" height="32" type="image/svg+xml">data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzMiAzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNTk5NzYgMCAwIC4wNTg3ODkgLjAwMjk5ODggLjAwMTA3ODIpIj4KCQk8cGF0aCBkPSJtNTMzLjUgMjc4LjRjMC0xOC41LTEuNS0zNy4xLTQuNy01NS4zaC0yNTYuN3YxMDQuOGgxNDdjLTYuMSAzMy44LTI1LjcgNjMuNy01NC40IDgyLjd2NjhoODcuN2M1MS41LTQ3LjQgODEuMS0xMTcuNCA4MS4xLTIwMC4yeiIgZmlsbD0iIzQyODVmNCIvPgoJCTxwYXRoIGQ9Im0yNzIuMSA1NDQuM2M3My40IDAgMTM1LjMtMjQuMSAxODAuNC02NS43bC04Ny43LTY4Yy0yNC40IDE2LjYtNTUuOSAyNi05Mi42IDI2LTcxIDAtMTMxLjItNDcuOS0xNTIuOC0xMTIuM2gtOTAuNXY3MC4xYzQ2LjIgOTEuOSAxNDAuMyAxNDkuOSAyNDMuMiAxNDkuOXoiIGZpbGw9IiMzNGE4NTMiLz4KCQk8cGF0aCBkPSJtMTE5LjMgMzI0LjNjLTExLjQtMzMuOC0xMS40LTcwLjQgMC0xMDQuMnYtNzAuMWgtOTAuNGMtMzguNiA3Ni45LTM4LjYgMTY3LjUgMCAyNDQuNHoiIGZpbGw9IiNmYmJjMDQiLz4KCQk8cGF0aCBkPSJtMjcyLjEgMTA3LjdjMzguOC0uNiA3Ni4zIDE0IDEwNC40IDQwLjhsNzcuNy03Ny43Yy00OS4yLTQ2LjItMTE0LjUtNzEuNi0xODIuMS03MC44LTEwMi45IDAtMTk3IDU4LTI0My4yIDE1MGw5MC40IDcwLjFjMjEuNS02NC41IDgxLjgtMTEyLjQgMTUyLjgtMTEyLjR6IiBmaWxsPSIjZWE0MzM1Ii8+Cgk8L2c+Cjwvc3ZnPgo=</Image> <Url type="text/html" method="GET" template="https://hkgoldenmra.blogspot.com/search"> <Param name="q" value="{searchTerms}"/> </Url> </OpenSearchDescription>
製作 開放搜尋檔案 後,使用 HTML 的 link標籤 或 Javascript 新增 開放搜尋檔案 到 Firefox
HTML 的 link標籤
<link rel="search" type="application/opensearchdescription+xml" href="opensearch-file-url" title="New Search Engine Title"/>Javascript 語法
window.external.AddSearchProvider("opensearch-file-url");不論 HTML 的 link標籤 或 Javascript 都 不能直接匯入本機檔案
Javascript 語法即使使用 createObjectURL 的 blob 都不能匯入
必須使用有效 IP 及 域名 才能匯入,因此最少都要建立臨時網頁伺服器
新增搜尋器後便可以的搜尋列輸入資料,直接使用指定搜尋器搜尋資料
雖然 Firefox 本身已經提供搜尋器,但需要改動搜尋器的參數,都可以自行製作或改良
例如 Firefox 原本的 Google搜尋器 只是簡單搜尋關鍵字,但想設定更多參數
在 搜尋 分頁會列出所以 搜尋器
有需要可以修改 預設搜尋器 及 搜尋器次序
<?xml version="1.0" encoding="UTF-8"?> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <ShortName>Custom Google Search</ShortName> <Url type="text/html" method="GET" template="https://www.google.com/search"> <Param name="q" value="{searchTerms}+-site%3Awikipedia.org"/> </Url> </OpenSearchDescription>例如在下不想在 Google搜尋器 搜尋與 wikipedia.org 相關的結果,可以在範本的內容加上 +-site%3Awikipedia.org
雖然 Firefox 使用 OpenSearch 不及 Chromium 直接輸入搜尋器直觀
但使用 OpenSearch 還可以接受以 POST 形式傳送參數
header("Content-Type: text/plain; charset=UTF-8"); echo "GET\n"; var_dump($_GET); echo "POST\n"; var_dump($_POST);製作 PHP 測試 GET 及 POST
<?xml version="1.0" encoding="UTF-8"?> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <ShortName>Test Get</ShortName> <Url type="text/html" method="GET" template="http://127.0.0.1:28080/test.php"> <Param name="q" value="{searchTerms}"/> </Url> </OpenSearchDescription>
<?xml version="1.0" encoding="UTF-8"?> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <ShortName>Test Post</ShortName> <Url type="text/html" method="POST" template="http://127.0.0.1:28080/test.php"> <Param name="q" value="{searchTerms}"/> </Url> </OpenSearchDescription>製作以 POST方法 發送的 OpenSearch
新增用作測試 GET 及 POST 的搜尋器
以 GET 搜尋資料
PHP 傳回 GET 的資料
以 POST 搜尋資料
PHP 傳回 POST 的資料
雖然能新增 GET 及 POST 的尋搜器
但其他 HTTP方法 例如:PUT, DELETE, PATCH 等便不能
總結
現在除了可以自製搜尋器,還可以因應需要改良搜尋器的搜尋參數但每個搜尋器接受的參數都不同,匯入搜尋器前都先了解參數內容
另外使用 OpenSearch 可以發佈到公共空間,分享及其他使用者
亦因為知道有這種技術後,所以在下已經將在下的 Blog 搜尋器加入到 HTML 中
可以方便閣下新增在下的 Blog 搜尋器,有興趣亦可以加入到 Firefox 搜尋中
可以在閣下自己網站加上搜尋器,方便其他使用者搜尋閣下網站資料
沒有留言 :
張貼留言