在IE9中调用date.getHours()时"Can't execute code from a freed script"



我将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()等。

我是编程界的新手,所以尽管这看起来很简单,但我希望这对其他处于类似情况的人有帮助。

相关内容

最新更新