如何在Firefox中覆盖Ctrl + N以启动AJAX

wol*_*all 5 javascript ajax firefox

注意: Juan Mendes答案是所选的答案,因为它对我的情况最有用。虽然AxGryndr也有一些有用的信息。阅读两个答案,它们对不同情况都有好处。谢谢你们双方的帮助。

我已经在这里问过类似的问题,它确实解决了我的问题的第一部分,但现在我有了另一个问题。我希望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();
    }
}
Run Code Online (Sandbox Code Playgroud)

JSFIDDLE

Jua*_*des 5

您的代码没有阻止默认行为

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

似乎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("");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在Chrome中(它可能对您没有用,但对于其他阅读此答案的人来说),如果console.log 在处理程序的顶部添加,您将看到该处理程序永远不会得到。因此,Chrome甚至无法让您看到CTRL+N组合,您也无能为力。就像Windows应用程序不会收到通知CTRL+ALT+DEL

如果应用程序必须适用于多个浏览器,我的建议是使用类似的不同组合ALT+SHIFT+N,您实际上不想接管基本的浏览器快捷方式。