我正在編寫一個 Chrome 擴展程序,並嘗試在 popup.html 文件中單擊按鈕後立即在當前網頁上覆蓋
當我從 popup.html 存取 document.body.insertBefore
方法時,它會覆寫彈出視窗上的
我是否必須在background.html 和popup.html 之間使用訊息傳遞才能存取網頁的DOM?我想在 popup.html 中完成所有操作,如果可能的話也使用 jQuery。
P粉2960800762023-10-19 08:17:05
使用程式註入來新增該 div 的擴充彈出腳本的一些範例。
不要忘記在manifest.json中新增權限,請參閱其他答案以獲取更多資訊。
簡單呼叫:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
注意:在 Chrome 91 或更早版本中,func:
應為 function:
。
使用參數呼叫並接收結果
需要 Chrome 92,因為它實作了 args
。
範例1:
1 2 3 4 5 |
|
範例2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
簡單呼叫:
1 2 |
|
使用參數呼叫並接收結果:
1 2 3 4 5 6 7 8 |
|
此範例使用 inContent
函數的程式碼自動轉換為字串,這樣做的好處是 IDE 可以應用語法突出顯示和 linting。明顯的缺點是瀏覽器會浪費時間來解析程式碼,但通常不到 1 毫秒,因此可以忽略不計。
P粉6004020852023-10-19 00:39:30
問題:擴充頁面(彈出視窗、選項、MV2 中的背景頁面等)與網頁分離,它們有自己的DOM、document
、< code>window 和chrome-extension://
URL。
解決方案:使用內容腳本存取網頁頁面或與其內容互動。
manifest.json:
1 2 3 4 |
|
它將在頁面載入時運行一次。之後,請使用訊息傳遞。
警告!它不能傳送 DOM 元素、Map、Set、ArrayBuffer、類別、函數等。它只能發送與 JSON 相容的簡單物件和類型,因此您需要手動提取所需的資料並將其作為簡單陣列或物件傳遞。
ManifestV3:
在擴充腳本(如彈出視窗)可根據需要將內容腳本/函數注入標籤。
此方法的結果是內容腳本中的最後一個表達式,因此可用於擷取資料。資料必須與 JSON 相容,請參閱上面的警告。
manifest.json 中所需的權限
:
「腳本」
- 強制;"activeTab"
- 理想場景,適合對使用者操作的回應(通常是點擊工具列中的擴充圖示)。安裝擴充功能時不顯示任何權限警告。 如果理想情況不可能,請將允許的網站新增至manifest.json 中的host_permissions
:
「*://*.example.com/」
以及您想要的任何其他網站。
"
或"*://*/"
這些會將您的擴充功能置於Chrome 線上應用程式商店中超慢審核佇列中由於廣泛的主機權限。
ManifestV2 與上述的差異:
權限
中指定網站。