导致javascript Date()发生故障的外部iframe
external iframe causing javascript Date() to malfunction
http://jsfiddle.net/bcg47/3/
这个错误只出现在Chrome的新版本中。它在mac和Chrome版本29.0.1547.57上进行了测试,在Windows和Chrome版本29.0.1547.62上进行了测试
上面的脚本非常简单。这是代码:
<script>
function displayDate() {
console.log('date1', new Date('2013-08-30T14:06:56-04:00'))
setTimeout(function() { displayDate(); }, 1000);
}
displayDate();
</script>
<iframe src="http://jsfiddle.net/wzqgN/2/" width="100%" height="300"></iframe>
加载的第一件事是一个javascript函数和对该函数的调用。在函数中,我记录了从javascript new Date()
构造函数返回的值(通过8月30日)。很简单,正如您在控制台中看到的,这是第一次工作。加载iframe时会出现问题。iframe的src为http://jsfiddle.net/wzqgN/2/.在这个iframe jsfiddle中也没有什么特别的事情。它有以下代码:
TargetDate = "12/31/2020 5:00 AM";
var dthen = new Date(TargetDate);
正如您在控制台中看到的,输出的第一行是:
date1 Fri Aug 30 2013 14:06:56 GMT-0400 (EDT)
但是,一旦加载了iframe并调用了另一个new Date()
,输出就会变为:
date1 Thu Dec 31 2020 05:00:00 GMT-0500 (EST)
我不知道这里发生了什么。我最初的想法是,这是一个浏览器错误,但我想问这里以确保。在我使用的脚本中,iframe实际上被设置到了与代码运行的域不同的域。这让我更加想知道到底发生了什么。我不明白来自iframe的脚本,更不用说跨域脚本了,会如何影响调用它的原始脚本。如有任何帮助,我们将不胜感激。谢谢
在某些情况下,Chrome会缓存Date()
构造函数。这是Chrome中最近的一个错误,如以下错误报告所示:
https://code.google.com/p/chromium/issues/detail?id=280531
此错误报告提供了一个代码示例,详细说明了在同一域下的窗口之间切换时缓存的相同问题Date()
构造函数。在您的案例中,<iframe>
正在创建一个新的窗口上下文并触发相同的错误。
作为一种变通方法,您可以使用Date.parse()
和setTime()
来绕过Chrome的内部Date
构造函数缓存。
var date1 = new Date();
var timestamp = Date.parse('2013-08-30T14:06:56-04:00');
date1.setTime(timestamp);
http://jsfiddle.net/bcg47/4/
- 调整窗口大小时,可拖动的对象会出现在容器外部
- HTML表单提交时未执行外部函数
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- 使用html中的外部javascript进行数据验证
- 将变量传递给外部Javascript
- 使用javascript在Flash中加载外部图像
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 如何更改reactjs中外部/独立组件的状态或属性
- javascript.点击隐藏事件故障
- 如何从外部页面激活非默认引导选项卡
- 如何在运行时在angular 2中加载外部js脚本
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 单击元素外部时进行JQuery
- 我的外部js文件无法加载
- 拆下外部分配器
- 什么'在webpack外部设置中,reactDom和reactDom不同
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 如何在构建node-webkit应用程序后获取外部资源
- 关于引入外部javascript文件的问题&css通过https
- 导致javascript Date()发生故障的外部iframe