Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从chrome扩展上下文在页面上运行脚本?_Javascript_Html_Google Chrome Extension - Fatal编程技术网

Javascript 如何从chrome扩展上下文在页面上运行脚本?

Javascript 如何从chrome扩展上下文在页面上运行脚本?,javascript,html,google-chrome-extension,Javascript,Html,Google Chrome Extension,我想知道如何禁用事件侦听器“复制” 我想是这样的: .js文件: let btn = document.getElementById('btn'); document.body.addEventListener('click', function(e) { if (e.target.id === 'btn') { e.stopPropagation(); } }, { capture: false }); 提前谢谢 manifest.json: { "name": "

我想知道如何禁用事件侦听器“复制”

我想是这样的:

.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、
文档、
窗口、
、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);
让我们把它分解一下:

  • 内容脚本在任何页面脚本之前的
    document\u start
    处运行
  • addEventListener的第三个参数是
    true
    ,这意味着我们的监听器在事件分派过程的捕获阶段被调用——在任何其他标准冒泡阶段监听器之前
  • 窗口
    是捕获阶段的第一个事件目标
  • 之所以使用stopImmediatePropagation(),是因为我们需要停止事件的后续冒泡,并防止页面脚本附加的任何其他侦听器看到事件
  • 因此最终的结果是我们的监听器保证在页面监听器之前被调用


    另外,正如您所见,此任务不需要浏览器操作弹出窗口。

    非常感谢,它工作得非常好。只是一个解释,google chrome在我重启后禁用了扩展,我为什么不禁用扩展?还是使用userscript更好?要在Chrome中使用开发者扩展,您需要切换到Canary或使用不禁用此类扩展的Chrome分支(例如CentBrowser和其他一些)。如果您使用Tampermonkey/Greasemonkey,那么在文档开始时运行带有
    /@run
    的用户脚本也是一个不错的选择。