1

我有一个代码,它通过调用 servlet 自动生成验证码图像并将其显示在 HTML 表单中。但对于视障人士,我也想放一个音频文件。因此,我将 servlet 生成的验证码存储为字符串形式的会话属性,并从该属性再次根据验证码生成音频文件。因此,假设验证码是“猫”,则相应地生成音频文件。现在的问题是,当我在 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 唯一

<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 的点击对于 Firefox 没有任何区别,因为在两个实例中都请求了相同的 URL。

解决此问题的一种简单方法是在 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>

在加载时添加这个 JS 函数将在每次加载页面后更改 src URL,并且由于每次调用不同的 URL,浏览器不会在其缓存中找到新 URL,并将检索每个对应的正确音频文件点击。

该解决方案与@Nick Div 99% 相似,尽管我的好奇心让我深入研究了更多细节。我仍然很想知道为什么这个问题专门发生在 Firefox 中而不是其他浏览器。一旦我找到答案就会回来。

于 2022-02-09T17:33:03.310 回答