我猜这是一个错误,但我还没有找到任何关于此的讨论.
众所周知,IE10将(针对规范)本地存储事件(即,在触发事件的同一全局执行上下文中),但IE11似乎更偏离规范(http://www.w3.org)/TR/webstorage /)当涉及到同域iframe时:
您可以通过在两个单独的选项卡中打开以下链接来测试此问题:http://hansifer.com/main.html
任何人都对这个怪癖有任何见解?
最新测试版本: IE v11.0.9600.16476 (更新2016-08-13:显然它是相关的"更新版本",而不是IE的"关于"对话框中报告的"版本")
链接到错误报告: https ://connect.microsoft.com/IE/feedback/details/811546/ie11-localstorage-events-fire-twice-or-not-at-all-in-iframes
更新2015-10-26
我只是注意到这似乎在v11.0.9600.18059中修复了,虽然我无法分辨修复程序何时删除,因为它似乎没有在任何最近的KB中被引用.
不幸的是,IE11 localStorage事件在其他方面仍然存在异常(尽管这些与本文中提出的问题不同):
IE在窗口上下文中引发localStorage事件,从中调用localStorage设置或删除触发事件的事件.localStorage事件只应在同一来源的外部窗口上下文中引发.(更新:在EdgeHTML 13.10586中工作)
IE使用空字符串,而不是null
用于e.oldValue/e.newValue
在添加存储物品/移除.(更新:仍然是EdgeHTML 13.10586中的问题)
IE不确定地调用localStorage事件处理程序,或者在设置/删除之前或之后生效,而不是一致地执行AFTER.
更新2015-12-24
看来这个bug被转移到了Edge(测试过的EdgeHTML 13.10586)
更新2016-02-02
韦尔普,没关系.在IE v11.63.10586.0中再次观察到此错误(更新2016-08-13:显然它是相关的"更新版本",而不是IE的"关于"对话框中报告的"版本")
更新2016-08-13
现在似乎已在IE(更新版本11.0.34)中修复了此问题,尽管存储事件仍然在原始窗口中针对规范(如上所述的已知长期问题)触发.
我发现这个KB包含在IE 2016年6月14日的安全更新中,尽管根据其描述它只涉及上面的第二个项目符号.
至于Edge(经测试的EdgeHTML 14.14393),似乎现在已经修复了这个问题,但是存在一个新问题:存储事件不会在同一页面的同源帧中触发.
我在这里分别向MS报告.
为什么
/<.+?> e/.exec("a <b> c <d> e")
Run Code Online (Sandbox Code Playgroud)
(意外地)回归
["<b> c <d> e"]
Run Code Online (Sandbox Code Playgroud)
代替
["<d> e"]
Run Code Online (Sandbox Code Playgroud)
非贪婪的运营商似乎什么都不做......
虽然看起来您可以通过更新选项卡属性来更改窗口中选项卡的顺序.index
,但它看起来不像选项卡api直接支持将选项卡移动到另一个窗口.
我错过了什么吗?有可行的解决方法吗?
我理解为什么将函数声明放在CONDITIONAL块中是不好的,但有没有理由建议不要在独立块中放置一个函数声明(除了可能导致混淆的参数,因为JS不是块作用域):
{
function foo() {};
}
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是为了实现Sublime Text中代码的任意部分的代码折叠.