web-dev-qa-db-ja.com

ユーザーがWebページのキーボードの[画面の印刷] / [画面の印刷]キーを使用できないようにする

私は現在、ユーザーがWebページのスナップショットを撮るのを止める必要があるプロジェクトを行っています。そのために、ユーザーは通常のキーボードで使用可能な「Print Scrn」/「Printscreen」キーを使用できます。

私はその解決策を見つけようとしましたが、無駄でした。可能であれば、Firefoxブラウザの「Screengrab」アドオンも停止することで、考慮する必要があります。

どんな助けも大歓迎で、私はPHP(サーバーサイド言語として)&jQueryをプロジェクトに使用しています。

51

Webブラウザからのスクリーングラブを無効にすることはできません。ユーザーのPCに追加のソフトウェアをインストールすることによってのみ可能になります。

それを行ういくつかのIRM(Information Rights Management)ツールがあります。 Windows/DirectX API呼び出しを保護し、 Oracle IRMMicrosoftのIRMテクノロジー などのビデオメモリも監視します。

特に後者は、 Internet Explorerの権限管理アドオン があるため、興味深いかもしれません。

しかし、すでに他の人が言ったように、IRM/DRMテクノロジーは議論の余地があり、ほとんどの場合、ユーザーを制限または悩ませることを理解する必要があります。

38
Dirk Vollmar

「できません」という文は嫌いです。役立つすべてのソリューションを以下に示します。

1- Halukからソリューションを入手できます。

<script type="text/javascript"> $(document).ready(function() {
    $(window).keyup(function(e){
      if(e.keyCode == 44){
        $("body").hide();
      }

    }); }); 
</script>

しかし、あなたは体を隠しますが、すでにクリップボードに「印刷」されています。この回答「2016年の時点で編集」でわかるように、クリップボードにテキストをコピーする別のイベントを発生させることができます jQueryを使用してクリップボードにコピーボタンをクリック 、これは次のようなものです:

function copyToClipboard() {
  // Create a "hidden" input
  var aux = document.createElement("input");
  // Assign it the value of the specified element
  aux.setAttribute("value", "Você não pode mais dar printscreen. Isto faz parte da nova medida de segurança do sistema.");
  // Append it to the body
  document.body.appendChild(aux);
  // Highlight its content
  aux.select();
  // Copy the highlighted text
  document.execCommand("copy");
  // Remove it from the body
  document.body.removeChild(aux);
  alert("Print screen desabilitado.");
}

$(window).keyup(function(e){
  if(e.keyCode == 44){
    copyToClipboard();
  }
}); 

これにより、問題の一部がブロックされます。ユーザーがこのウィンドウの外にある別のオブジェクトに焦点を合わせた場合、スクリーンショットを撮ることができます。 **しかし、それに対する別の解決策もあります。ウィンドウがフォーカスされていない場合、単に穴のボディを無効にします。親愛なるブラジル人の友人からの完全なソリューション:

function copyToClipboard() {
  // Create a "hidden" input
  var aux = document.createElement("input");
  // Assign it the value of the specified element
  aux.setAttribute("value", "Você não pode mais dar printscreen. Isto faz parte da nova medida de segurança do sistema.");
  // Append it to the body
  document.body.appendChild(aux);
  // Highlight its content
  aux.select();
  // Copy the highlighted text
  document.execCommand("copy");
  // Remove it from the body
  document.body.removeChild(aux);
  alert("Print screen desabilitado.");
}

$(window).keyup(function(e){
  if(e.keyCode == 44){
    copyToClipboard();
  }
}); 

$(window).focus(function() {
  $("body").show();
}).blur(function() {
  $("body").hide();
});

動作する例を次に示します。

Here i try to unfocus the window, on unfocus i hide content and show modal

45
Marcelo Rocha

これは不可能です。

43
Sjoerd

ありがたいことに、このとんでもないアイデアは、「画面グラブを無効にする」部分も「ユーザーのFirefox拡張機能を無効にする」部分も、確実に実装することはできません。そして、たとえそうであっても、@ kbokが上記のコメントで指摘しているように、これを行うためのrightはありません。

オンラインでコンテンツを保護する唯一の方法は著作権法です-それらに言及するだけで、人々がそれを悪用するのを怖がらせることができます! -またはまったく表示しない。

15
Pekka 웃

これを試して

$(document).keyup(function(e){
  if(e.keyCode == 44) return false;
});

うまくいけばいい

14
ZX12R

JavaScriptまたはFlashを使用して、クリップボードの内容を変更できます。これはすでに少し役立ちます。

6
Leo

@Sjoerdが言ったように、これは不可能です。

保護したい写真の場合、たとえば、代わりに透かしが入った低品質の画像を表示し、適切な場合は透かしが入っていない高品質の画像のみを表示することをお勧めします。

しかし、ええ...あなたがそれらをコピーすることを不可能にしたい場合...それらをオンラインにしないでください。

4
Svish

ユーザーがキー印刷画面をクリックすると、他の何かをクリップボードにコピーできます。これは例であり、ユーザーテキストをコピーします。

<p id="test">test</p>

function copyToClipboard(elementId) {

  // Create a "hidden" input
  var aux = document.createElement("input");

  // Assign it the value of the specified element
  aux.setAttribute("value", document.getElementById(elementId).innerHTML);

  // Append it to the body
  document.body.appendChild(aux);

  // Highlight its content
  aux.select();

  // Copy the highlighted text
  document.execCommand("copy");

  // Remove it from the body
  document.body.removeChild(aux);

}
$(document).ready(function(){
    $(window).keyup(function(e){
      if(e.keyCode == 44){
        copyToClipboard('test');
      };
    });
});
4
Piotr Kazuś

それを行う直接的な方法はありませんが、prnt scrnから可能な限りコンテンツを保護する方法があります。

アイデアはこれです:

  1. Javaが無効になっている場合はコンテンツにアクセスできないようにし、アーティストスコープのコピープロテクトなどのスクリプトを使用します。

  2. Prnt scrnを検出すると、登録ユーザー情報を含むメッセージが管理者に送信されます。これは、メンバーのみがアクセスできる制限されたコンテンツのみが恩恵を受けることを意味します。 [〜#〜] ip [〜#〜]アドレスを送信するのは良い考えのように聞こえますが、IPを禁止することはそうではないため、それから多くの利益。

  3. Webサイトのウィンドウの外に出ると、コンテンツはオーバーレイで覆われます。オーバーレイは、Webサイトに戻ってアクティブにしない限り削除できません。オーバーレイは、前のポイントで述べたprnt scrn検出コードを再度アクティブにします。

  4. デバイスがモバイルの場合、画像を非表示にするか、私の場合のように「申し訳ありません」ページにリダイレクトできます。

  5. snipping toolおよび他の同様のブラウザ拡張機能とアドオンは役に立ちません。私が見つけた1つのツールを除いて、フルページ画面キャプチャと呼ばれます

    • このツールは、ボタンを押してから約3秒後にWebコンテンツをキャプチャします。これは、オーバーレイを閉じてコンテンツに戻るのに十分な時間です
    • 適切なターンアラウンドは、5秒以上を必要とする「オーバーレイを閉じる」をクリックしたときにカウンターを開始することです。この拡張機能が既にスナップショットを取得した後
  6. ビデオキャプチャを防ぐ間接的な方法もありますが、まだ作業中ですが、ここまたはブログに投稿します。

  7. あなたのコンテンツが本当にそれだけの価値があるなら、ユーザーはまだカメラを使ってそれをキャプチャするかもしれません、それのための方法もあるかもしれません!しかし、私はそれについて話す前にいくつかの研究をする必要があります。

ブログで この投稿 を更新します。これまでに使用した他のテクニックを使用して、さらに保護するために使用します。デモについては このクイズ (まだ開発中)を確認してください。

3
iJassar

印刷画面を防止したいのはなぜですか?

保護したい写真がある場合は、低解像度にし、プログラムでPHPに何らかの著作権ロゴを含めることができます。

これでほぼだと思います。

2
SRKX

別のソリューションを次に示します。

_<script type="text/javascript"> $(document).ready(function() {
    $(window).keyup(function(e){
      if(e.keyCode == 44){
        $("body").hide();
      }

    }); }); </script>
_

これは、@ ZX12Rのソリューションに似ています。利点は、印刷スクリーンキャッチソフトウェアがサードパーティツール(例:snagIt)であっても、このコードが機能することです。

$("body").hide();を自分に合ったものに置き換えることができます。たとえば、すべての画像を非表示$("img").hide();にして、1秒後に表示することができます。

欠点は、Webページがアクティブなウィンドウでない場合は機能しないことです。

1
Haluk