2

(继续这个答案

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

  • 提交新问题,或
  • 发表新评论。

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

在这些情况下,上面答案中的脚本可以正常工作。


我注意到,还有另一种提交问题的方法:
按下EnterCtrl+Enter同时关注问题标题文本框

我也想用脚本来涵盖这一点。

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

我仍然遇到的问题是,如果我通过跟随New issue按钮(即通过历史 API)导航到新问题页面,
然后我按下Ctrl+Enter或只是Enter在标题文本框中,然后弹出窗口会暂时出现,但提交不是挡住了

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

实力:

  • 打开https://github.com/darkred/test/issues
  • 单击New Issue按钮(您将通过 History API 重定向到https://github.com/darkred/test/issues/new
  • (您会注意到现在的焦点在问题标题文本框上)
    键入 123 作为问题标题并将焦点保持在问题标题文本框上(将问题正文留空),
  • Ctrl+Enter(或只是Enter),
  • 现在请注意,确认弹出窗口将立即出现,
    但不会阻止提交。

我的脚本有什么问题?


作为参考,这里列出了 GitHub 的键盘快捷键列表:screenshot
当你按下 ? 在新的问题页面中。

4

1 回答 1

0

我设法通过强制取消焦点+重新关注#issue_title元素来解决这个问题:
当您打开新问题页面时,焦点在问题标题文本框上。
由于某种原因,该脚本不会阻止提交。但是,如果您强制取消聚焦并重新聚焦该元素(使用blur()(=unfocus) 和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 - 提交问题和评论之前的确认

于 2016-08-13T14:15:38.117 回答