我有一段代码可以通过调用servlet自动生成验证码图像,并将其显示在HTML表单中。但对于视障人士,我也想放一个音频文件。因此,我将servlet生成的captcha代码存储为字符串形式的会话属性,并根据该属性再次根据captcha生成音频文件。因此,假设captcha是"c-a-t“,则相应地生成音频文件。现在的问题是,当我在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>发布于 2012-11-17 18:33:07
它可能正在缓存url。只需使用它来使url唯一。
<source src="http:www.xyz.com/getSound?rand=<?php echo rand(time()); ?>" type="audio/wav">发布于 2012-11-20 08:17:39
当我尝试在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那里得到这个想法的
发布于 2022-02-09 17:33:03
这是一个有趣的问题,通过解决这个bug可以学到很多东西。
首先,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>
添加这个on load JS函数将在每次加载页面后更改src URL,因为每次调用不同的URL,浏览器将不会在其缓存中找到新的URL,并将为每次相应的单击检索正确的音频文件。
这个解决方案与@Nick Div有99%的相似之处,尽管我的好奇心让我深入研究了更多细节。我仍然很想知道为什么这个问题只发生在Firefox中,而不是其他浏览器。一旦我找到答案就会回来。
https://stackoverflow.com/questions/13429669
复制相似问题