gpt4 book ai didi

javascript - 外部 iframe 导致 javascript Date() 出现故障

转载 作者:行者123 更新时间:2023-11-29 10:46:35 24 4
gpt4 key购买 nike

http://jsfiddle.net/bcg47/3/

此错误仅出现在新版本的 Chrome 中。它已在 Mac 上的 Chrome 版本 29.0.1547.57 和 Windows 上的 Chrome 版本 29.0.1547.62 m 上进行了测试。

上面的脚本非常简单。这是代码:

<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/

关于javascript - 外部 iframe 导致 javascript Date() 出现故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18540638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com