簡體   English   中英

如何從Chrome擴展上下文在頁面上運行腳本?

[英]How to run script on page from chrome extension context?

我想知道如何禁用事件監聽器“復制”

我認為是這樣的:

.js文件:

let btn = document.getElementById('btn');

document.body.addEventListener('click', function(e) {
  if (e.target.id === 'btn') {
    e.stopPropagation();
  }
}, {
  capture: false
});

提前致謝!

manifest.json:

{
  "name": "Test",
  "version": "1.0",
  "description": "Just testing!",
  "manifest_version": 2,
  "icons": {
    "48": "images/icon_48.png",
    "128": "images/icon_128.png"
  },
  "browser_action": {
    "default_icon": "images/icon_16.png",
    "default_popup": "popup.html"
  }
}

要訪問該網頁,您需要一個內容腳本,因為彈出窗口是一個單獨的頁面,具有自己的DOM, documentwindow ,URL和所有內容。

您還需要攔截copy事件,如devtools的事件偵聽器面板中所示:

圖片

manifest.json應該具有以下內容:

"content_scripts": [{
  "matches": ["https://moller.jusbrasil.com.br/*"],
  "js": ["content.js"],
  "run_at": "document_start"
}]

content.js:

window.addEventListener('copy', e => e.stopImmediatePropagation(), true);

讓我們分解一下:

  1. 內容腳本在任何頁面腳本之前在document_start運行
  2. addEventListener的第三個參數為true意味着在事件分發過程的捕獲階段中調用我們的偵聽器-在任何其他標准冒泡階段偵聽器之前
  3. window是捕獲階段的第一個事件目標
  4. 使用stopImmediatePropagation()是因為我們既需要停止隨后的事件冒泡,又需要阻止頁面腳本附加的任何其他偵聽器看到該事件

因此,最終結果是可以確保在頁面偵聽器之前調用我們的偵聽器。

PS如您所見,此任務無需使用browser_action彈出窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM