2

この回答の続き)

次のことを試みるたびに確認ポップアップを表示するスクリプトを (Greasemonkey を使用して) 作成しようとしています。

  • 新しい問題を提出する、または
  • 新しいコメントを投稿します。

押すことによってCtrl + Enter:
ユーザーがOkポップアップを押すと、スクリプトは送信を許可し
ますが、ユーザーがCancelポップアップを押すと、スクリプトは送信を停止します。

上記の回答のスクリプトは、これらの場合に問題なく機能します。


問題を送信する別の方法があることに気付きました:問題のタイトル textboxにフォーカスを置いてまたはを
押します。 EnterCtrl+Enter

これもスクリプトでカバーしたいと思います。

以下は私のコードです。新しい問題のページ ( https://github.com/darkred/test/issues/new
) を新しいタブで開いた場合_(つまり、単一ページのアプリケーション ワークフロー、別名 History API 経由ではない)_)、を押してもスクリプトは動作します。Ctrl+Enter

New issue私がまだ抱えている問題は、ボタンをたどって(つまり、History 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のキーボード ショートカット リストのリストを次に
示します。新刊ページで。

4

1 に答える 1

0

要素にフォーカスを外す+再フォーカスを強制する#issue_titleことでこれを解決することができました。
新しい問題ページを開くと、問題のタイトルテキストボックスにフォーカスがあります。
何らかの理由で、スクリプトは送信をブロックしません。ただし、 (=unfocus) および)を使用しblur()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 に答える