4

私のサイトの wysihtml5 に小さな問題があります。いくつかの html タグのみを許可したいのですが、パーサー ルールから下線を削除し、wysihtml5 ライブラリから下線コマンドを削除しても、CTRL(コマンド)+U を押して、選択したテキストに下線を引くことができます。この振る舞いをなくすにはどうすればよいですか?アドバイスをありがとう。

4

1 に答える 1

1

新しい回答:これが私の更新されたソリューションです。次のように、既存の keydown イベント ハンドラーを更新しました(そして、 ctrl が押された状態を追跡するための keyup ハンドラーを追加しました)。

// --------- Shortcut logic ---------
var ctrlDown = 0;

dom.observe(element, "keydown", function(event) {
  var keyCode  = event ? event.which : window.event.keyCode,
    command    = shortcuts[keyCode];
  if (1 == event.ctrlKey) {
    console.log('Ctrl key pressed. Setting ctrlDown = 1.');
    ctrlDown = 1;
  }
  if (85 == keyCode && 1 == ctrlDown) {
    console.log('Pressed "U" (keyCode 85), but Ctrl key still down. Don\'t fire!');
    return event.preventDefault(), !1;
  }
  if (1 == ctrlDown && !event.altKey && command) {
    console.log('Shortcut Ctrl + keyCode ' + keyCode + ' triggered.');
    that.commands.exec(command), event.preventDefault();
  }
});

dom.observe(element, "keyup", function(event) {
  // note: "event.ctrlKey" doesn't work with keyup, use keyCode/which 
  if (17 == (event ? event.which : window.event.keyCode)) {
    console.log('Ctrl key released. Setting ctrlDown = 0.');
    ctrlDown = 0;
  }
});

github でプルリクエストを送信しました。


元の回答: Ctrl+u キーボード ショートカットを無効にするために必要だったのは、 の 8494 行目のショートカット オブジェクトから "u" (85) の keyCode を削除することでしたwysihtml5-0.4.0pre.js

変化する

  shortcuts = {
    "66": "bold",     // B
    "73": "italic",   // I
    "85": "underline" // U
  };

  shortcuts = {
    "66": "bold",     // B
    "73": "italic"    // I
  };

エディター内で Ctrl+u ショートカットを使用できなくなります。

または、キーダウン イベントをキャッチして Ctrl+u ショートカットを無効にすることもできます (つまり、デフォルトの動作を防止します)。何かのようなもの:

// --------- disable ctrl+u shortcut for underlining texts ---------
dom.observe(element, "keydown", function(event) {
  if ((event.ctrlKey || event.metaKey) && 'u' == String.fromCharCode(event.which).toLowerCase()) {
    // do something
  }       
});
于 2013-04-21T06:00:12.537 に答える