javascript - 如果打开新选项卡,e.preventDefault() 不会阻止 CTRL + s 的默认功能

标签 javascript firefox search add-on preventdefault

我编写这段代码是为了让我能够使用 Firefox 插件快速搜索网页上突出显示的文本。我有公开托管的代码 here

我捕获按键 ctrl+s 并进行搜索的函数如下:

document.addEventListener("keydown", function(e) {
// Help came from https://stackoverflow.com/a/14562869/6897392
 if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)){
   text = getSelectionText();
   if(text != ""){
      e.stopImmediatePropagation();
      e.preventDefault();
      console.log(text);
      openInNewTab(searches[default_search]+text);
   }
 }
}, false);

如果我注释掉 openInNewTab(searches[default_search]+text); 行,即以下函数:

function openInNewTab(url) {
// Help came from https://stackoverflow.com/a/11384018/6897392
  var win = window.open(url, '_blank');
  win.focus();
  return false;
}

它将阻止保存对话。但是,如果我保留代码,它将阻止原始选项卡中的保存对话框,但它打开的新选项卡将弹出保存对话框。

我没能弄清楚如何防止保存对话框出现在第二个窗口中,并且需要一些帮助。

谢谢!

最佳答案

如果它确实按照您所描述的方式进行,这听起来像是 Firefox 中的一个错误,但您应该能够通过短暂延迟您的 openInNewTab 调用非常来解决它:

document.addEventListener("keydown", function(e) {
// Help came from https://stackoverflow.com/a/14562869/6897392
 if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)){
   text = getSelectionText();
   if(text != ""){
      e.stopImmediatePropagation();
      e.preventDefault();
      console.log(text);
      setTimeout(() => {                                // ***
          openInNewTab(searches[default_search]+text);
      }, 50);                                           // ***
   }
 }
}, false);

Firefox 的弹出窗口阻止程序应该允许它,因为它是在用户启动的事件中安排的。

关于javascript - 如果打开新选项卡,e.preventDefault() 不会阻止 CTRL + s 的默认功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53144502/

相关文章:

javascript - React onclick 需要异步/等待吗?

javascript - <输入类型 ="date"> 在 mozilla 中不起作用

javascript - 用javascript替换别人的图片

javascript - 尝试理解 browser.elementIdText 命令

css - 哪些浏览器版本的 Firefox 支持 Bootstrap?

c - 比较大量整数对的快速方法是什么?

search - 对 Haskell 中的某些元素进行二分搜索

javascript - 如何在所有浏览器中创建 Javascript 键盘快捷键

html - Firefox 中的内联 block 不会缩小到内容

c - 如何在 C 源代码中搜索简单的 if 语句?