事件停止传播不会停止传播

问题描述 投票:0回答:1

我正在开发一个 chrome 扩展,我在 Notion 页面上创建了一个 context script

如果用户专注于上下文脚本中的输入并点击退格键/删除,输入中的字符将被删除,并带有概念页面上的内容。我通过添加

onKeyDown
处理程序解决了这个问题:

export const onKeyDown = (evt: React.KeyboardEvent) => {
  if (evt.key === 'Backspace') {
    evt.stopPropagation()
  }
}

现在,如果用户专注于上下文脚本中的输入并点击退格键/删除,则仅删除输入值。

当无法通过按 Ctrl+V 或 Cmd+V 将文本粘贴到输入中时,我遇到了另一个问题。当用户专注于上下文脚本中的输入并按下 Ctrl+V 或 Cmd+V 时,文本将被粘贴到概念页面而不是聚焦输入中。我试图通过添加来解决这个问题:

export const onKeyDownDefault = (evt: React.KeyboardEvent) => {
  if (evt.key === 'Backspace') {
    evt.stopPropagation()
  }
  // Ctrl+V or Cmd+V pressed?
  if ((evt.ctrlKey || evt.metaKey) && evt.keyCode == 86) {
    console.log('stop propagate')
    evt.stopPropagation()
    // evt.preventDefault()
  }
}

但是没有用。我可以看到控制台输出“停止传播”,但文本没有粘贴到输入中。

javascript google-chrome-extension chrome-extension-manifest-v3 content-script browser-extension
1个回答
0
投票

可能是因为 Notion 正在监听

paste
事件,尝试也
stopPropagation
代替
paste
事件。

工作示例:

<input type="text" id="input" />
<script>
  document.addEventListener('paste', (event) => {
    console.log((event.clipboardData || window.clipboardData).getData('text'));
  });
  const elInput = document.getElementById('input');
  elInput.addEventListener('keydown', (ev) => ev.stopPropagation());
  elInput.addEventListener('paste', (ev) => ev.stopPropagation());
</script>

非工作示例:

<input type="text" id="input" />
<script>
  document.addEventListener('paste', (event) => {
    console.log((event.clipboardData || window.clipboardData).getData('text'));
  });
  const elInput = document.getElementById('input');
  elInput.addEventListener('keydown', (ev) => ev.stopPropagation());
</script>

© www.soinside.com 2019 - 2024. All rights reserved.