搜尋小工具可為網路應用程式提供可自訂的搜尋介面。 這項小工具只需要少量的 HTML 和 JavaScript,就能實作和啟用常見的搜尋功能,例如商情項目和分頁。另外,您也可以使用 CSS 和 JavaScript 自訂部分介面。
如果您需要比小工具提供的更多彈性,建議使用 Query API。如要瞭解如何使用 Query API 建立搜尋介面,請參閱使用 Query API 建立搜尋介面。
建立搜尋介面
建立搜尋介面需要完成幾個步驟:
- 設定搜尋應用程式
- 為應用程式產生用戶端 ID
- 為搜尋框和結果新增 HTML 標記
- 在網頁上載入小工具
- 初始化小工具
設定搜尋應用程式
每個搜尋介面都必須有在管理控制台中定義的搜尋應用程式。搜尋應用程式可提供查詢的額外資訊,例如資料來源、商情項目和搜尋品質設定。
如要建立搜尋應用程式,請參閱建立自訂搜尋體驗一文。
為應用程式產生用戶端 ID
除了設定 Google Cloud Search API 存取權中的步驟以外,您也必須為網頁應用程式產生用戶端 ID。
設定專案時,請注意下列事項:
- 選取 [網路瀏覽器] 用戶端類型
- 提供應用程式的來源 URI。
- 已建立用戶端 ID 的附註。您需要用戶端 ID 才能完成後續步驟。小工具不需要用戶端密鑰。
詳情請參閱適用於用戶端網路應用程式的 OAuth 2.0。
新增 HTML 標記
這個小工具需要少量的 HTML 才能運作。您必須提供:
- 搜尋框的
input
元素。 - 將建議彈出式視窗固定到的元素。
- 包含搜尋結果的元素。
- (選用) 提供用來包含商情項目控制項的元素。
下列 HTML 程式碼片段顯示搜尋小工具的 HTML,其中要繫結的元素可透過 id
屬性識別:
載入小工具
小工具是透過載入器指令碼來動態載入。如要包含載入器,請使用 <script>
標記,如下所示:
您必須在指令碼標記中提供 onload
回呼。當載入器就緒時,系統會呼叫此函式。載入器準備就緒後,請呼叫 gapi.load()
來載入 API 用戶端、Google 登入與 Cloud Search 模組,以繼續載入小工具。
載入所有模組後,系統會呼叫 initializeApp()
函式。
初始化小工具
首先,使用您產生的用戶端 ID 和 https://www.googleapis.com/auth/cloud_search.query
範圍呼叫 gapi.client.init()
或 gapi.auth2.init()
,藉此初始化用戶端程式庫。接下來,請使用 gapi.cloudsearch.widget.resultscontainer.Builder
和 gapi.cloudsearch.widget.searchbox.Builder
類別設定小工具,並將其繫結到您的 HTML 元素中。
以下範例說明如何初始化小工具:
以上範例參照了兩個定義的設定變數:
自訂登入體驗
根據預設,小工具會在使用者開始輸入查詢時,提示使用者登入並授權應用程式。您可以使用 Google 登入網站,為使用者打造更貼近個人需求的登入體驗。
直接授權使用者
使用「Sign In With Google」來監控使用者的登入狀態,並視需要登入或登出使用者。例如,下列範例會觀察 isSignedIn
狀態以監控登入變更,並使用 GoogleAuth.signIn()
方法透過點選按鈕啟動登入:
詳情請參閱使用 Google 帳戶登入。
自動登入使用者
您可以代表貴機構使用者預先授權應用程式,進一步簡化登入體驗。如果使用 Cloud Identity Aware Proxy 來保護應用程式,這個技巧也相當實用。
詳情請參閱在 IT 應用程式中使用 Google 登入功能。
自訂介面
您可以透過下列技術組合變更搜尋介面的外觀:
- 使用 CSS 覆寫樣式
- 使用變壓器裝飾元素
- 使用轉接程式建立自訂元素
使用 CSS 覆寫樣式
搜尋小工具隨附自己的 CSS,可設定建議和結果元素,以及分頁控制項。您可以視需要調整這些元素樣式。
載入小工具時,搜尋小工具會動態載入預設的樣式表。這會在載入應用程式樣式表之後,提高規則的優先順序。如要確保自己的樣式優先於預設樣式,請使用祖系選取器提高預設規則的特異性。
舉例來說,如果在文件的靜態 link
或 style
標記中載入,以下規則就不會產生任何作用。
.cloudsearch_suggestion_container {
font-size: 14px;
}
而是將規則宣告在網頁中宣告的祖系容器 ID 或類別。
#suggestions_anchor .cloudsearch_suggestion_container {
font-size: 14px;
}
如需小工具產生的支援類別和 HTML 範例清單,請參閱支援的 CSS 類別參考資料。
使用變壓器裝飾元素
如果要在轉譯前裝飾元素,請建立並調整實作該方法的實作轉接程式來實作一種裝飾方法,例如
decorateSuggestionElement
或decorateSearchResultElement.
舉例來說,下列轉接程式會將建議類別新增至建議和結果元素。
如要在初始化小工具時註冊轉接程式,請使用各個 Builder
類別的 setAdapter()
方法:
裝飾器可以修改容器元素和任何子元素的屬性。裝飾期間,可新增或移除子元素。 不過,如果您要對元素進行結構變更,請考慮直接建立元素,而不要進行裝飾。
使用轉接程式建立自訂元素
如要為建議、商情容器或搜尋結果建立自訂元素,請建立並註冊轉接器,以便實作 createSuggestionElement
、createFacetResultElement
或 createSearchResultElement
。
下列轉接程式示範如何使用 HTML <template>
標記建立自訂建議及搜尋結果元素。
如要在初始化小工具時調節轉接程式,請使用各個 Builder
類別的 setAdapter()
方法:
使用 createFacetResultElement
建立自訂商情項目元素有幾項限制:
- 您必須將 CSS 類別
cloudsearch_facet_bucket_clickable
附加至使用者點選並切換值區的元素。 - 您必須使用 CSS 類別
cloudsearch_facet_bucket_container
來納入每個包含元素的元素。 - 值區的顯示方式不得與回應中的顯示順序不同。
舉例來說,下列程式碼片段是以連結 (而非核取方塊) 來呈現商情項目。
自訂搜尋行為
搜尋應用程式設定代表搜尋介面的預設設定,且屬於靜態設定。如要實作動態篩選器或商情項目 (例如允許使用者切換資料來源),您可以透過轉接功能攔截搜尋要求,藉此覆寫搜尋應用程式設定。
使用 interceptSearchRequest
方法實作轉接程式,以修改對執行前 Search API 發出的要求。
例如,下列轉接程式會攔截要求限制使用者指定來源的要求:
如要初始化小工具,請在建構 ResultsContainer
時使用 setAdapter()
方法
下列 HTML 是用於顯示按來源篩選的選取方塊:
以下程式碼會監聽變更、設定選項,並視需要重新執行查詢。
您也可以在轉接程式中實作 interceptSearchResponse
,以攔截搜尋回應。
固定 API 版本
根據預設,小工具會使用最新的穩定版 API。如要鎖定特定版本,請在將小工具初始化前,將 cloudsearch.config/apiVersion
設定參數設為偏好的版本。
在未設定或設為無效值的情況下,API 版本會預設為 1.0。
固定小工具版本
為避免搜尋介面發生非預期的變更,請設定 cloudsearch.config/clientVersion
設定參數,如下所示:
gapi.config.update('cloudsearch.config/clientVersion', 1.1);
如果未設定或設為無效的值,小工具版本將預設為 1.0。
保護搜尋介面的安全
搜尋結果包含高度敏感的資訊。遵循確保網路應用程式安全性的最佳做法,特別是針對點擊攻擊攻擊。
詳情請參閱 OWASP 指南專案。
啟用偵錯功能
使用 interceptSearchRequest
為搜尋小工具開啟偵錯功能。例如:
if (!request.requestOptions) {
// Make sure requestOptions is populated
request.requestOptions = {};
}
// Enable debugging
request.requestOptions.debugOptions = {enableDebugging: true}
return request;