0

人々がテストを受けることができるaspアプリがあります。テストページには、残り時間を表示するaspコントロールがあります。そのコントロールを右クリックすると、時間を提供するjavascriptが中断されます。これを解決するために、右クリックを無効にしました。しかし、テキストを選択してIE8アクセラレータの青いボタンをクリックすると、JavaScriptも中断されることに気付きました。もちろん、左クリックを無効にすることはできません。

IEでアクセラレータを無効にするオプションを見つけたので、社内では問題は解決しました。しかし、すべてのユーザーにそのオプションをすべてのコンピューターで無効にするように依頼することはできないという理由だけで、別の解決策を見つけたいと思います。

プログラムをアップグレードすることで問題が解決されるように、コードに修正を統合するソリューションをお勧めします。したがって、誰かが無効化/バイパス/ ...つまりアクセラレータ...が可能かどうか、またどのように可能かを知っている場合。

前もって感謝します。

編集

サーバー上のタイマーとクライアント上のタイマーの両方を使用すると、新しい問題が発生します。サーバーとクライアントの時差の間に線を引くのはどこですか。とにかく、この問題は今のところ発生していないので、人々はテストに集中し、システムを破壊する方法を見つけることに忙しすぎると思います。

編集2

onSelectStartでメソッドを使用してみましたが、うまくいきませんでした。これは私のテストHTMLです:

<html xmlns="http://www.w3.org/1999/xhtml" >
<SCRIPT LANGUAGE="JavaScript">
    function showObj() {
        //alert('?');
        return false;
    }
</SCRIPT>
<head>
    <title>Untitled Page</title>
</head>

<body onSelectStart="showObj()">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
        Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 
        Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. 
        Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
    </p>
</body>

4

4 に答える 4

3

完全にクライアントベースのタイマーを使用して、人々が特定の時間に何かを送信したことを実際に検証している場合、不正行為は常に可能です。あなたが何をしようとも、誰かがあなたのページの上にタイマーを完全に殺すスクリプトをドロップすることができます。

サーバークロックを使用する必要があるようです。一部の顧客が画面上のタイマーを壊すようなことをした場合、まあ、それについてあなたができることは何もありません。しかし、人々が回答を送信するときにサーバー上で時間を検証する限り、それは常に正確です。

于 2011-03-30T10:12:24.250 に答える
2

この投稿をチェックしてください:

サイト全体でIE8アクセラレータを無効にする

@EricLawは「いいえ」と言っています。サイトでそれらを無効にすることはできません。

contentEditable@mbennyは、コンテンツをまたはとしてマークできると言っていますunselectable

于 2011-03-30T14:54:18.390 に答える
2

検証と同じように、クライアントからのデータを決して信頼しないでください。実際に行うべきことは、サーバー側で、テストが開始された時刻と、テストが送信された時刻を記録することです。ユーザー側の時計は、正確であることを保証する方法がないため、優れたものである必要がありますが、信頼することはできません(上記の5ダースの理由により)。

ほぼ障害のない方法は、エンドユーザーが知らない、対話する、または変更できないサーバー側のユーザーです。

于 2011-03-31T22:03:12.737 に答える
1

解決策は、テキストを選択する機能を無効にすることです。作業している環境でコピーと貼り付けが必要になるとは思えません。

ほとんどのブラウザでは、これはCSSを使用して行われます:(user-select: none;該当する場合はブラウザプレフィックスを使用)。

ただし、このCSSはIEでは使用できません(IE9についてはよくわかりませんが、とにかく含める価値があるかもしれません)。特にIEについて質問しているので、別のソリューションが必要です。幸い、IEは次の1つを提供します。

<div unselectable="on">...</div>

残念ながら、属性は継承されないため、テキストを含むすべての要素で属性を指定する必要があります。(または、ページが読み込まれるとすべての要素に適用するJavascriptまたはJQuery関数を作成できます)

最後に、おそらく最良のオプションですonselectstart。要素に関連付けることができるメソッドもあります。このようなものはテキスト選択を無効にします:onselectstart = function(){ return false; }。さらに良いことに、これは子タグに継承される必要があるため、タグに配置するだけ<body>で完了できます。

于 2011-04-07T12:16:36.897 に答える