每当在 GitHub 中的新问题页面的标题文本框中按 Ctrl+Enter 或 Enter 时,用于创建确认弹出窗口的用户脚本

Userscript for creating a confirmation popup whenever pressing Ctrl+Enter or Enter in the title textbox of a new issue page in GitHub

(延续

我一直在尝试制作一个脚本(使用 Greasemonkey),每当我尝试这样做时都会显示一个确认弹出窗口:

通过按 Ctrl + Enter:
如果用户在弹出窗口中按下 Ok,则脚本允许提交,
但如果用户在弹出窗口中按下 Cancel,则脚本会停止提交。

上述答案中的脚本在这些情况下工作正常。


我注意到,还有一种提交问题的方法:
EnterCtrl+Enter 并同时关注 issue title 文本框

我也想用脚本来解决这个问题。

下面是我的代码。
如果我只是在新选项卡中打开新问题页面 (https://github.com/darkred/test/issues/new)_(即不通过 single-page 应用程序工作流程,也就是历史记录 API)_),那么该脚本在按下 Ctrl+Enter.

时也有效

我还有的问题是 如果我通过 New issue 按钮 (即通过历史记录 API)
导航到新问题页面 然后我在标题文本框中按 Ctrl+EnterEnter, 然后弹出窗口暂时出现,但提交未被阻止

(function () {
    function init() {
        var targArea = document.querySelector('#issue_title'); // New issue title
        function manageKeyEvents(zEvent) {
            if (zEvent.ctrlKey && zEvent.keyCode === 13) {      // and the focused element is the issue title textbox
                if (confirm('Are you sure?') === false) {
                    zEvent.stopPropagation();
                    zEvent.preventDefault();
                // } else {
                    // var btn = document.querySelector('.btn-primary');                        // 'Submit new issue' button                
                    // btn.click();
                }
            }
        }
        if (targArea !== null) {targArea.addEventListener('keydown', manageKeyEvents);}
    }
    init();
    document.addEventListener('pjax:end', init); // for the History API
})();

力量:

我的脚本有什么问题?


此处列出了 GitHub 的键盘快捷键列表供参考:screenshot
当您在新问题页面中按 ? 时出现。

我通过在 #issue_title 元素上强制取消焦点+re-focus:
设法解决了这个问题 当您打开新问题页面时,焦点位于问题标题文本框上。
由于某种原因,脚本不会阻止提交。但是,如果您强制该元素 (使用 blur()(=unfocus) 和 focus() 取消焦点和 re-focus,则脚本会阻止提交。

这是代码(总是// @run-at document-end

(function () {
    function init() {
        var targArea = document.querySelector('#issue_title'); // New issue title
        function manageKeyEvents(zEvent) {
            targArea.blur();
            targArea.focus();
            if ((zEvent.ctrlKey && zEvent.keyCode === 13) || zEvent.keyCode === 13) {
                if (confirm('Are you sure?') === false) {
                    zEvent.stopPropagation();
                    zEvent.preventDefault();
                } else {
                    var btn = document.querySelector('.btn-primary');  
                    btn.click();
                }
            }
        }
        if (targArea !== null) {targArea.addEventListener('keydown', manageKeyEvents);}
    }
    init();
    document.addEventListener('pjax:end', init); // for the History API
})();


这是完整的用户脚本:
GitHub - Confirmations before submitting issues and comments