我将Date对象传递给调用date.getHours()
或任何其他方法(如date.getFullYear()
)的方法,该方法会抛出错误"Can't execute code from a freed script"
。IE9似乎不支持日期选择器使用的日期对象。
我是javascript/general编码的新手,遇到了一个似乎只在IE9中出现的问题。我警告大家这件事,因为我可能以完全错误的方式解决了它。。。
为了解决这个问题,我尝试了各种不同的方法,例如:
if (date.getHours()=="undefined") {
var localDate = new Date(date);
var hours = localDate.getHours();
// etc
}
我现在有了一个解决方案(它可能不是最好的,但它能起到作用),并将在下面发布,但我想知道是否有其他人遇到过同样的问题,以及他们是如何解决的?
根据我的经验,当您得到的Date对象是在另一个窗口中构造的时,就会出现问题,这样,自构造以来,另一个窗户就被关闭或重新加载了一个新页面。
解决方案是以某种字符串形式在窗口间发送对象,并根据需要在目标上下文中重新构建它们。
(当然,这不仅仅是Date实例,它是任何对象类型。如果我记得的话,Primitives没有问题。)
我的解决方案如下。。。
我创建了一个新方法:
function getValidDate(date) {
try {
date.getHours();
return date;
} catch (e) {
return new Date(date);
}
}
然后,我用任何受原始问题影响的方法调用getValidDate()
:
date = getValidDate(date);
正如Pointy所描述的,我刚刚返回了一个新的Date,它由传递到方法中的原始日期填充。然后,我可以在这个新日期调用任何方法,如getHours()
、getFullYear()
等。
我是编程界的新手,所以尽管这看起来很简单,但我希望这对其他处于类似情况的人有帮助。