微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何在firefox中重写Ctrl N以启动AJAX

注意:Juan Mendes的回答是选择的答案,因为它对我的情况有最有用的回答.虽然AxGryndr也有一些有用的信息.阅读这两个答案,它们都适用于不同的情况.谢谢你们两位帮忙.

我已经问了一个关于这个here的类似问题,它确实解决了我问题的第一部分,现在又有了另一个问题.我希望Ctrl N启动包含AJAX的脚本,但是一旦我运行.get函数,它就会导致认启动.有谁知道这方面的工作.

这个小提琴有一些代码可以显示我的问题.这是一些代码.

function checkkey(e)
{
    if(e.ctrlKey && e.keyCode == 'N'.charCodeAt(0) && !e.shiftKey && !e.altKey)
    {
        try{e.preventDefault();}catch(ex){}
        var m_objXMLHttpReqObj = new XMLHttpRequest();
        m_objXMLHttpReqObj.open("GET", "", false);
        m_objXMLHttpReqObj.send();
    }
}

JSFIDDLE

解决方法:

您的代码没有阻止认行为

function checkkey(e) {
    if(e.ctrlKey && e.keyCode == 'N'.charCodeAt(0) && !e.shiftKey && !e.altKey) {
        e.preventDefault();
        // Now send your AJAX

似乎AJAX正在干扰停止认行为的能力.您试图发送同步AJAX请求(不要这样做,它将停止浏览器)并且您没有给它一个URL去(触发错误).一旦您更改设置以正确地为其提供URL并使其异步,那么它在FF中可以正常工作.

这是工作代码

function checkkey(e) {
    if(e.ctrlKey && e.keyCode == 'N'.charCodeAt(0) && !e.shiftKey && !e.altKey){
        e.preventDefault();
        var m_objXMLHttpReqObj = new XMLHttpRequest();
        m_objXMLHttpReqObj.open("GET", 
                // URL to go to
                "/echo/html/", 
                // Asynchronous
                true);
        m_objXMLHttpReqObj.send("");
    }
}

但是,在Chrome中(对你来说可能没有用,但对其他读过这个答案的人来说),if you add a console.log at the top of your handler,你会发现处理程序永远不会得到.因此,Chrome甚至不会让您看到CTRL N组合,也无法对此做任何事情.就像Windows应用程序没有得到CTRL ALT DEL的通知一样

如果应用程序必须适用于多个浏览器,我的建议是使用不同的组合,如ALT SHIFT N,你真的不想接管基本的浏览器快捷方式.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐