如何检测Edge浏览器输入损坏错误是否已修复

时间:2018-09-12 18:14:22

标签: javascript microsoft-edge browser-detection

最近,Edge浏览器出现了一个错误,该错误的一个<option>元素省略了value属性。

<select name="qty">
  <option>1</option>
  <option>2</option>
</select>

受影响的Edge浏览器向表单数据中插入随机字符:qty=1Qqty=2Җ或更糟糕的qty=29

Microsoft于7月在issue #1747791July RS4 Windows 10 Update, kb4338819中推出了修复程序。使用此修复程序,他们没有增加浏览器版本号17.17134。他们改为将操作系统内部版本号增加到17134.165

我支持的应用程序继续从使用旧版本Edge的用户那里收到错误报告。我想检测到受影响的浏览器用户并显示警告。

Edge的损坏版本和固定版本都在UserAgent字符串17.17134中报告相同的版本号。还有其他方法可以检测Edge的版本或操作系统的版本号吗?

如何检测此Edge浏览器输入损坏错误是否已修复?

3 个答案:

答案 0 :(得分:2)

我要做的第一件事是使用JavaScript在value上审核<option>上的import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket s=new Socket("192.168.0.36",6666); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); dout.writeUTF("Hello Server"); dout.flush(); dout.close(); s.close(); }catch(Exception e){System.out.println(e);} } } 丢失,如果这是问题的根源,似乎在您发布的链接中提到了。

然后,如果您无法嗅探用户代理中的差异,一种测试方法是在遇到该用户代理时以编程方式(javascript)将屏幕外表单提交到屏幕外或隐藏的iFrame目标中。 / p>

这将在页面加载时完成,而无需用户干预

然后验证服务器端,并通过postMessage()调用将页面返回到iframe,该调用将告诉父页面是否存在问题。

还将在父级中要求postMessage事件侦听器。

表格和iframe均可根据需要使用脚本插入dom

答案 1 :(得分:0)

@charlietfl的适应解决方案

仅当用户受到影响时,才会显示隐藏的iframe 用户代理。今天,这包括最新的Edge浏览器,但是 在10月,UserAgent中的版本应再次增加。

iframe会打开而不是返回父窗口 到可以访问用户会话的页面。呈现HTML表单 受到错误影响的类型,并立即发布。 检查POST数据是否损坏,并使结果可用 进入用户会话。

相当明显的javascript(带有jquery)看起来像这样:

  % if ( $do_check ) {
    <iframe id="edge_browser_check_iframe" style="display:none;"></iframe>
    <script type="text/javascript">
      if ( /Edge\/17\.17134/.test( navigator.userAgent )) {
        $("#edge_browser_check_iframe").attr(
          'src',
          'edge_browser_check-iframe.html'
        );
      }
    </script>
  % }

答案 2 :(得分:-2)

可以通过创建JavaScript函数来解决,以在用户打开网站时检测Edge浏览器及其版本。

如果它是有问题的版本,请通知用户使用其他浏览器,并且不允许任何进一步的交互。

如果它是Edge的任何其他版本,则让用户使用该网站。

致谢

Deepak