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

How to override Ctrl + N in firefox to launch AJAX

本文关键字:启动 AJAX Ctrl 重写 firefox      更新时间:2023-09-26

注意: 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();
    }
}

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(它可能不使用你,但其他人谁读这个答案),如果你在你的处理程序的顶部添加一个console.log,你会看到处理程序永远不会得到。因此,Chrome甚至不让你看到CTRL+N的组合,你不能做任何事情。就像Windows应用程序不会收到CTRL+ALT+DEL的通知

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

我相信你的问题是,你正在检查一个按键和执行你的行动太迟后,keyup。如果你改变你的代码绑定到Ctrl+N的键下,我认为你将能够得到所需的结果。比如:

var pKey
$(function() {
$(window).keydown(function(e) {
    if(e.which == 17) {
        pKey = e.keyCode;
    }
    else {
        if(pKey == 17 && e.keyCode == 78) {
            e.preventDefault();
            console.log(e);
        }
    }
});
});

我添加了全局变量来捕获Ctrl键,这是keycode 17。然后,我在第二个keydown上捕获键码78,这是n。先前e.p preventdefault()不足以阻止新窗口,所以我必须为e.p stoppropagation (), e.p stopimmediatepropagation()和console.log(e)添加额外的行可以删除。正如Juan M所提到的,其他的不再需要了,所以我已经更新了代码,不包括它们。

注意: Firefox更改了键等待优先级。它曾经是系统>网站>火狐,但似乎人们抱怨网站劫持快捷键,所以优先级改为系统>火狐>网站,这意味着即使你的网站绑定了Ctrl+N,火狐的优先级为一个新的窗口接管。