Tom*_*Tom 12 javascript firefox date
我正在制作一个画布图,它实时更新我们正在向客户展示的信息,并且正在准备时钟上的DST更改.我们的要求之一是图表能够照常运行,而不需要客户在时钟切换时刷新页面.
在解决这个问题时,我发现了Firefox的这个错误:
https://bugzilla.mozilla.org/show_bug.cgi?id=127246
基本上,如果更改系统时间而不必关闭浏览器/选项卡,则JavaScript中的Date()对象不会更新,而且由于我们使用系统时钟查询API,这是一个非常重要的问题.
我假设它没有固定,因为票仍然标记为"新",我也很确定这是导致问题而不是我的代码的另一部分,所以我怎样才能得到系统的当前时间它在Firefox中更改后的时钟而不必刷新页面?
仅供参考我正在使用的Firefox版本是19.0.2
提前致谢
例
将系统时钟设置为12:00并打开Web应用程序...
var currentHour = new Date().getHours() //returns 12
Run Code Online (Sandbox Code Playgroud)
将系统时钟设置为13:00而无需重新打开Web应用程序.
var currentHour = new Date().getHours() //returns 12
Run Code Online (Sandbox Code Playgroud)
无论如何,您都不能依赖客户端设置正确的日期/时间.我能想到的唯一解决方法是从其他来源请求当前时间,例如服务器.
如果您不想错误地使用自己的服务器,您可以找到一个返回时间戳的公共API,例如某种Time API,或者具有可靠正常运行时间的服务,例如eBay的Client Alerts API:
http://clientalerts.ebay.com/ws/ecasvc/ClientAlerts?callbackname=hello&callname=GetPublicAlerts
hello({"Timestamp":"2013-03-22T14:43:21.757Z","Ack":"Failure","Errors":[{"ShortMessage":"Missing required input element.","LongMessage":"Required input element is missing from the request.","ErrorCode":"1.19","SeverityCode":"Error","ErrorParameters":[{"Value":"ChannelDescriptor","ParamID":"0"}],"ErrorClassification":"RequestError"}],"Build":"E809_CORE_BUNDLED_15739296_R1","Version":"809"});
Run Code Online (Sandbox Code Playgroud)
忽略所有内容并获取UTC时间戳.只要确保你没有从一些服务器中掏出你真正不需要的数据!
而不是像Sergiu Toarca的回答那样创建一个新窗口,而是在每次需要更新时创建一个新的Web工作者.Date()每当生成新的Web worker时,Firefox都会更新该对象.
function currDate() {
var blob = new Blob([""]),
blobURL = window.URL ? window.URL.createObjectURL(blob) : window.webkitURL.createObjectURL(blob),
worker = new Worker(blobURL);
worker.terminate();
return new Date();
}
Run Code Online (Sandbox Code Playgroud)
您可以像普通Date()对象一样使用它:
currDate().getHours(); // Gives you an updated hour
Run Code Online (Sandbox Code Playgroud)
请参阅DEMO(适用于Firefox 19).
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |