使用Greasemonkey在Firefox中取消页面前进/后退快捷键

3

首先是背景:

在Mac OS X 10.5.8上使用Firefox 3.6.3时,当在标准文本区域输入文本时,组合热键Command+左箭头和Command+右箭头分别跳转到当前行的开头/结尾。然而,在使用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);
  }
}

}, false );

安装/启用后,按下command+left | right箭头键会弹出一个带有相应代码的警告框,但是一旦关闭对话框,浏览器就会执行向前/向后移动页面的操作。我尝试使用evt.keyCode = 0设置一个新代码,但没有起作用。

因此,问题是,是否可以更新这个Greasemonkey脚本,以防止向后/向前翻页功能?

(注意:我也可以接受其他解决方案。不一定非得是Greasemonkey,这只是我尝试过的方向。真正的目标是能够禁用向前/向后热键功能。)


我尝试了几次,但由于某种原因,上面的整个代码片段都无法保留在代码突出显示区域中。如果您复制此内容,请确保获取最后的 "}, false );" 部分。 - Alan W. Smith
1个回答

2
alert(kCode);后面添加return false;,这样大部分情况下就可以了。
可能还需要添加:
evt.preventDefault();
and/or
evt.stopPropagation();

这两个函数适用于大多数Firefox版本,但我不确定Mac是否也适用。 通常情况下,您的函数将在编辑器脚本之后触发。但是,如果它在之前触发,可能会禁用光标跳转。

evt.preventDefault();明白了。确实,它也能禁用光标跳转,但我可以接受这一点。我宁愿手动处理这个问题,也不愿冒着数据丢失的风险。完整代码如下:document.addEventListener('keypress', function (evt) { // 获取meta键 var isCmd = evt.metaKey; // 检查是否按下了meta键 if(isCmd) { // 如果是,获取键码 var kCode = evt.keyCode;// 判断是否为左箭头或右箭头键 if(kCode == 37 || kCode == 39) { // 如果是,则阻止默认行为 evt.preventDefault(); } } }, false ); - Alan W. Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接