1

サーブレットを呼び出してキャプチャ画像を自動生成し、HTML フォームで表示するコードがあります。しかし、視覚障害者のために、音声ファイルも入れたかったのです。そのため、サーブレットによって生成されたキャプチャ コードをセッション属性として文字列形式で保存し、その属性からキャプチャに従ってオーディオ ファイルを再度生成します。したがって、captcha が「cat」の場合、音声ファイルはそれに応じて生成されます。問題は、Chrome でページを更新するとキャプチャ画像と音声の両方が更新されることです。これは理想的ですが、Mozilla では音声ファイルではなく画像のみが更新されます。

    <div class="formRow">
                <div class="field">
                    <img style="margin-left:91px; margin-top:-6px;" class="image" src="http:www.xyz.com/captchaServlet"> 
         //the above line calls a servlet for the image       

                </div>
                </div></br>
                 <div class="formRow">
                      <div class="field">
                      <audio style="margin-left:91px;" controls="controls">
      <source  src="http:www.xyz.com/getSound" type="audio/wav">
//the above line calls servlet for audio file
    Your browser does not support this audio format.
    </audio>
                      </div>
             </div>
4

3 に答える 3

2

URLをキャッシュしている可能性があります。これを使用して、URLを一意にします

<source  src="http:www.xyz.com/getSound?rand=<?php echo rand(time()); ?>" type="audio/wav">
于 2012-11-17T10:33:07.183 に答える
1

機能中にオーディオタグのソースを変更しようとしたところ、window.onLoadうまくいきませんでした。ただし、タグ内にスクリプトを記述したところbody、魅力的に機能しました。これは私が使用したものです:

<script type="text/javascript">
  if(navigator.userAgent=="Mozilla/5.0 (X19; Ubuntu; Linux i697; rv:10.0) Gecko/22222222 Firefox/16.0"){
    var d = new Date();
    var n = d.getTime();
    document.getElementById("audiowav").src="http://abcd.com/getSound?rand="+n;
  }
</script>

基本的に@Shahilからアイデアを得ました

于 2012-11-20T00:17:39.297 に答える
0

これは興味深い問題であり、このバグを解決することで多くのことを学ぶことができます。

そもそも、Mozilla Firefox は、異なるインスタンスでクリックされた URL「http:abcd.com/getSound」の違いを理解できませんでした。たとえば、午前 9 時 30 分のクリックと午前 9 時 31 分のクリックは、両方のインスタンスで同じ URL が要求されたため、Firefox に違いはありません。

この問題を解決する簡単な方法の 1 つは、URL の末尾に固有のパラメーターを含めて、Firefox が Web リクエストを区別できるようにすることです。

<script type="text/javascript">
  window.onload = (event) => {
    var d = new Date();
    var n = d.getTime();
    document.getElementById("audiowav").src="http://abcd.com/getSound?rand="+n;
    };
</script>

これを on load JS 関数に追加すると、ページが読み込まれるたびに src URL が変更され、毎回異なる URL が呼び出されるため、ブラウザーはキャッシュ内で新しい URL を見つけられず、対応するそれぞれの正しいオーディオ ファイルを取得します。クリック。

解決策は @Nick Div と 99% 似ていますが、私の好奇心から詳細を掘り下げました。この問題が特に Firefox で発生し、他のブラウザーでは発生しない理由を知りたいと思っています。答えがわかったらまた来ます。

于 2022-02-09T17:33:03.310 に答える