【问题标题】:Cancel page forward/back hotkeys in Firefox with Greasemonkey使用 Greasemonkey 在 Firefox 中取消页面前进/后退热键
【发布时间】:2011-02-25 14:35:21
【问题描述】:

首先是背景:

在 Mac OS X 10.5.8 上的 Firefox 3.6.3 中,当将文本输入标准时,Command+LeftArrow 和 Command+RightArrow 的热键组合分别将光标跳转到当前行的开头/结尾。但是,当使用 CKEditor、FCKEditor 和 YUI Editor 时,Firefox 似乎并没有完全识别出它是一个文本区域。相反,它会退回到那些热键的默认功能,即在浏览器历史记录中向后/向前移动。发生这种情况后,当您返回页面时,编辑器中的文本也会被清除,从而很容易松开正在处理的任何内容。

我正在尝试编写一个greasemonkey 脚本,我可以使用它来捕获事件并防止执行页面向前/向后跳转。到目前为止,我已经能够在 GreaseMonkey 中看到以下用作 .user.js 脚本的事件:

document.addEventListener('keypress', function (evt) {
// grab the meta key
var isCmd = evt.metaKey;

// check to see if it is pressed
if(isCmd)
{
  // if so, grab the key code;
  var kCode = evt.keyCode;

  if(kCode == 37 || kCode == 39)
  {
    alert(kCode);
  }
}

}, 错误的 );

安装/启用后,按命令+左|右箭头键会弹出带有相应代码的警报,但一旦关闭对话框,浏览器就会执行页面向前/向后移动。我尝试使用 evt.keyCode = 0 设置新代码,但这不起作用。

那么,问题是,能否更新此 Greasemonkey 脚本以防止后退/前进页面移动?

(注意:我也对其他解决方案持开放态度。不一定是 Greasemonkey,这只是我尝试过的方向。真正的目标是能够禁用前进/后退热键功能。)

【问题讨论】:

  • 我尝试了几次,但由于某种原因,上面的整个代码 sn -p 不会停留在代码突出显示区域中。如果你复制这个,确保你得到最后一个 "}, false );"部分。

标签: firefox greasemonkey hotkeys


【解决方案1】:

alert(kCode); 之后添加return false; 大部分时间都应该这样做。

可能还需要补充:

evt.preventDefault();
and/or
evt.stopPropagation();

这两个功能适用于大多数 FF 版本,但我不确定 Mac 是否可用。 此外,通常,您的 func 将在编辑器脚本之后触发。但是,如果它之前触发,它可能会禁用该光标跳转。

【讨论】:

  • evt.preventDefault();知道了。确实,确实也禁用了光标跳转,但我对此没意见。我宁愿不得不手动执行此操作,也不愿冒丢失数据的风险。完整代码为: document.addEventListener('keypress', function (evt) { // 抓取元键 var isCmd = evt.metaKey; // 检查是否按下 if(isCmd) { // 如果是,则抓取key code; var kCode = evt.keyCode; // 看看它是左箭头还是右箭头 if(kCode == 37 || kCode == 39) { // 如果是,则阻止默认触发。 evt.preventDefault( ); } } }, false );
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
相关资源
最近更新 更多