【问题标题】:Override Ctrl+M hotkey of Facebook in Firefox在 Firefox 中覆盖 Facebook 的 Ctrl+M 热键
【发布时间】:2011-11-22 00:46:52
【问题描述】:

我正在开发一个bookmarklet,它可以让用户用我们的语言在任何输入字段上书写。我们选择Ctrl+M 在默认和我们的语言之间切换布局(受维基百科启发)。它在几乎每个使用 chrome 的网站上都运行良好。当我们开始检查 Firefox 时,我们发现它只在 Facebook 中失败。

此外,Facebook 从window 之外捕获Ctrl+M 范围。比如,形成地址栏、搜索栏、萤火虫控制台等。

我尝试过使用原始 javascript、jQuery 以及 John ResigjQuery Hotkeys 插件,但没有运气:(

这是我尝试过的一个版本。您可以在 Firebug 控制台上运行它以进行测试 -

(function(){
    var noConflictMode = false;
    if(typeof $ !== 'undefined') noConflictMode = true;
    if(typeof jQuery === 'undefined') {
        var root = (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]);
        var ns = document.createElementNS && document.documentElement.namespaceURI;
        var script = ns ? document.createElementNS(ns, 'script') : document.createElement('script');
        script.type = 'text/javascript';
        script.onreadystatechange = function () {
            if (this.readyState == 'complete') test();
        }
        script.onload= test;
        script.src= 'https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.min.js';
        root.appendChild(script);
    } else {
        test();
    }

    function test() {
        if(noConflictMode) jQuery.noConflict();
        jQuery(window).on('keydown keyup keypress', function(e){
            e.preventDefault();
            // For Firefox
            e.stopPropagation();
            // Extra effort :|
            e.stopImmediatePropagation()
            e.cancelBubble = true;
            console.log(e);
            return false;
        });
    }

})();

【问题讨论】:

  • Ctrl+M 无关,但是如果相关页面已经加载了jQuery 并且不需要 想要noConflict 模式怎么办?你的test 函数会搞砸页面。
  • @T.J.Crowder Nice Point,我已在我的原始代码 (github.com/torifat/jsAvroPhonetic/blob/master/dist/…) 中修复了它。为了简单起见,我在这里删除了它。
  • .delegate() 的第一个参数是一个选择器。你的意思是.bind()
  • @gilly3 是的,抱歉,我在原始代码中的live 中写了bind。转换时我忘记了delegate 参数。谢谢,我再次修复:)
  • Ctrl+M 在 facebook 中的作用是什么?它似乎对我不起作用

标签: javascript jquery facebook firefox jquery-plugins


【解决方案1】:

出于安全原因,您不能在客户端 Web 上执行此操作,您可以使用 JS 或 JQ 或任何您想要的语言编写任何代码,但 MOZ 永远不会处理您的代码。

请注意,一件事是浏览器“编译”您的代码并使用它,另一件事是您可以更改浏览器本身。出于这个原因,有“附加组件”。 例如,您不能在 V.S. 中更改 Visual Studio 编程的内核。 :D

但是……

...您可以要求用户重新绑定密钥,您有 3 种方法可以做到这一点:

1) 安装 MOZ 插件(或您自己的插件)

2) 使用:http://mxr.mozilla.org/seamonkey/source/dom/public/idl/events/nsIDOMKeyEvent.idl

3) 在操作系统级别安装一个优先级高于应用程序(在本例中为 MOZ)的快捷键b(您可以使用 C# 来完成)。 Alt+tab 组合是高级快捷方式的示例,或“Prnt Scrn”

about:config 也没有办法做到这一点。

也许这个 url 可以帮助你,但我建议你尝试在 MOZ 中要求更改而不是要求 Javascript 代码。

http://www-archive.mozilla.org/unix/customizing.html#keys

【讨论】:

  • 就是这样,因为 Firefox 比 IE 和 Chrome 更安全,哈哈
  • 认为 Firefox 不是 Chrome,所以它不是谷歌应用。它是基于 Netscape 的,他们的人并没有真正的利润。我的意思是,考虑一下(我真的不知道,但可能是 99%),在他的内核中,仅针对 facebook 功能有非常具体的工作(就像它为 google、g+、gmaps 等提供的一样)。我建议您在 StackOverflow 或外部的一个非常具体的 firefox 社区对此发表评论。 MOZ 比 Jquery、Javascript 或 Facebook 问题更重要
  • 我也想到他们在内部是这样做的。我对此进行了严格的搜索。但是,没有找到任何线索。顺便说一句,谢谢你的努力,我投了你的票 :) 但是,抱歉不能接受你的回答,因为它没有涵盖我想要的。
  • 没问题,但我仍然认为您需要解决方法,我为 firefox 制作了一些插件,据我所知,我认为这个问题没有答案,至少如您所愿: )
猜你喜欢
  • 2013-01-29
  • 2010-09-16
  • 2014-09-12
  • 2015-05-13
  • 2022-12-31
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多