2017-01-27 64 views
3

我正在使用Chrome擴展來自動填充演示數據。我創建了用於自動填充數據的JavaScript文件「xyz.js」。 所以我通過點擊按鈕來執行腳本 chrome.tabs.executeScript(tabs[0].id, {file: "xyz.js"});我得到所需的輸出。鉻擴展中的內容腳本和後臺腳本究竟是什麼?

我沒有使用內容腳本或後臺腳本。使用內容腳本或後臺腳本可以獲得什麼好處?

+1

您正在使用'chrome.tabs.executeScript(tabs [0] .id,{file:「xyz.js 「});'表示你*使用內容腳本:* xyz.js *。另外,對'chrome.tabs.executeScript()'的調用正在背景上下文中執行,但可能是在彈出框內(猜測)。 – Makyen

+1

我建議您閱讀[Chrome擴展程序概述](https://developer.chrome.com/extensions/overview)(也可能與從概述鏈接的頁面一起)。 [體系結構部分](https://developer.chrome.com/extensions/overview#arch)具有全面的體系結構信息,這些信息應該有助於您理解組織/完成情況的方式。您可能還需要閱讀[內容腳本](https://developer.chrome.com/extensions/content_scripts)和[消息傳遞](https://developer.chrome.com/extensions/messaging)。 – Makyen

回答

6

首先,你是的確使用使用內容腳本。在這裏,您只是通過事件來控制內容腳本的執行。

後臺腳本是在後臺運行,而用戶與Chrome瀏覽器進行交互監聽觸發(如監聽選項卡上單擊事件)

雖然內容腳本的東西是一個人的實際上與網頁進行交互(基本上是DOM元素)。

現在,你的方法包括他們在清單之間的區別是,如果他們被列入清單,內容腳本將盡快加載的頁面加載,因此(在這種情況下)會自動 - 同時填充數據,而chrome.tabs.executeScript(tabs[0].id, {file: "xyz.js"});將在特定的觸發事件中加載內容腳本,因此(在這種情況下)會在觸發器上自動填充數據(例如按下按鈕時)。

Here是注入內容腳本的所有方法。

+0

現在我知道如果我在manifest.json中包含內容腳本,則可以在刷新頁面後立即加載內容腳本。如果我想將內容腳本保持在清單中,但只在單擊按鈕時才觸發,該怎麼辦? –

+0

@ParagBandewar在這種情況下,移動函數內的代碼並在點擊按鈕時調用它。 –

+0

任何關於https://stackoverflow.com/questions/44909642/how-to-get-background-script-to-call-function-in-content-script-for-chrome-exten的想法 – SuperUberDuper

2

實際上在擴展中執行腳本是另一種使用內容腳本的方式。 內容腳本也可以在擴展的清單中定義。

內容腳本很快就可以訪問擴展api的一小部分,並且可以完全在頁面的DOM上工作。如果它們在清單中定義,它們會在自動導航時加載到頁面中,或者您可以使用您正在使用的api注入它們,但最終結果是相同的。

後臺腳本無法訪問頁面的DOM,但可以完全訪問擴展的api。

在後臺腳本中,您存儲了您的擴展的狀態,因爲它的存在直到瀏覽器關閉。

下面是關於Chrome擴展的體系結構的更多詳細信息,也可以在這裏找到關於內容和背景腳本的信息。 https://developer.chrome.com/extensions/overview

1

使background.js文件和內容腳本的主要目的是提高擴展的性能。

如果假設您有一個擴展程序在其點擊中顯示某些內容,那麼它可以保持愚蠢。主要功能可以寫在background.js和其他內容腳本中,而這些內容腳本又將填充我們保持愚蠢的視圖。

在一個簡單的意義上,具有background.js到位內容腳本提高了工作效率,這是什麼谷歌擴展開發建議。最後,您正在運行的文件本身就是一個內容腳本,因爲它與網頁交互。我希望您在manifest.json文件的內容腳本部分下有一個文件條目

相關問題