4

一部のフォームバリデータは、一部の入力フィールドでCTRL+ C/ CTRL+をブロックします。V簡単なブックマークレットまたはキーボードを適切に使用できるものはありますか? それとも、一部のページのこの種の失礼な動作を無効にすることがブラウザで許可されているのでしょうか?

編集:私が探しているのは、ページのコンテキストでjavascriptスニペットを実行することにより、ページの右クリックを有効にするために使用できるような同様のソリューションです:

javascript:void(document.oncontextmenu=null) 

これまでのところ、Greasemonkey のようなサードパーティ製ツールを使用せずに JavaScript スニペットを使用した同様のソリューションはないと思います

4

2 に答える 2

2

それはそれがどのように行われるかによって異なります。また、イベント リスナーを削除/無効化することは常に危険です。サイトの機能に深刻な損害を与える可能性があります。また、ハンドラーが悪意を持っているか善意であるかを知ることはできません。少なくとも、ハンドラーが存在するかどうかを知ることはできません。

だから、私は「javascriptがコピーペーストを防ぐ」という最初のいくつかのGoogleの結果をざっと読んだところ、ほとんど愚かなスクリプト見つけまし. スクリプトでできることは次のとおりです。

  • 入力要素のすべての oncopy、-paste、-input、-cut、-drag などのプロパティを削除します
  • ドキュメントでこれらのイベントの種類をキャプチャし、その伝播を停止します。そのため、(バブル) ハンドラーが呼び出されることはなく、既定のアクションを防ぐことはできません。

しかし、すでに述べたように、これはすべてを妨げることはできません。非常に便利なイベントであるこのソリューションは、一度に複数の文字が挿入されるのを防ぐためinputに巧妙に使用されています。そのため、そのイベントを停止してアプリケーションを中断するかどうかを決定する必要があります。

var evts = ["copy", "paste", "cut", "drag", "selectionstart?", "input?", …?];
var els = [document, document.body].concat(
  [].slice.call(document.getElementsByTagName("input")),
  [].slice.call(document.getElementsByTagName("textarea"))
);
function trap(e) { e.stopPropagation(); }
for (var i=0; i<evts.length; i++) {
    var evt = "on"+evts[i].charAt(0).toUpperCase()+evts[i].substr(1);
    for (var j=0; j<els.length; j++)
        els[j][evt] = null; // remove handler
    document.addEventListener(evts[i], trap, true); // capture phase
}
于 2012-11-08T23:55:00.073 に答える