Làm cách nào để viết một tập lệnh để phát hiện thời điểm người dùng thay đổi thời gian hệ thống của họ trong JS?Phát hiện các thay đổi đối với thời gian hệ thống trong JavaScript
Trả lời
Không có cách nào (di động) để theo dõi biến trong JavaScript. Ngoài ra, thông tin ngày tháng không nằm trong DOM, do đó bạn không có khả năng xảy ra sự kiện DOM.
Điều tốt nhất bạn có thể làm là sử dụng setInterval
để kiểm tra định kỳ (mỗi giây?). Example:
function timeChanged(delta) {
// Whatever
}
setInterval(function timeChecker() {
var oldTime = timeChecker.oldTime || new Date(),
newTime = new Date(),
timeDiff = newTime - oldTime;
timeChecker.oldTime = newTime;
if (Math.abs(timeDiff) >= 5000) { // Five second leniency
timeChanged(timeDiff);
}
}, 500);
Chính xác là như vậy. Cảm ơn. Nhưng sự thay đổi trở lại thời gian, không có gì xảy ra. – AHOYAHOY
@yomash, Đây có thể là sự cố Windows hoặc Chrome; Tôi nhận thấy phải mất một thời gian để tuyên truyền những thay đổi trở lại trong thời gian bản thân mình. Nó xảy ra, tuy nhiên, nhưng chỉ một vài giây sau hơn bạn mong đợi. – strager
có, vấn đề về chrome (trên ubuntu). Cảm ơn bạn. – AHOYAHOY
Bạn có nghĩa là nếu họ đang thay đổi thời gian hệ thống của riêng họ thành một cái gì đó sai? Bạn có thể yêu cầu người sử dụng cho múi giờ của họ và nhận được thời gian chính xác từ máy chủ, và sau đó so sánh nó với thời gian hệ thống của người dùng.
Trang của tôi đã tạo sự kiện vào đúng thời điểm. Khi người dùng thay đổi thời gian hệ thống của mình, sau đó bỏ qua một vài sự kiện chẳng hạn. – AHOYAHOY
Đừng nghĩ rằng có giải pháp cho những gì bạn đang yêu cầu nhưng bạn có thể bù đắp múi giờ cho người dùng.
new Date().getTimezoneOffset() * -1
Điều này trả về giá trị tính bằng phút từ GMT. Bare trong tâm trí mặc dù điều này không đưa DST vào xem xét.
Kiểm tra trong một chức năng khoảng thời gian đó đã không thay đổi quá nhiều:
function getTime() {
var d = new Date();
return d.getTime();
}
function checkTime() {
if (Math.abs(getTime() - oldtime) > 2000) { // Changed by more than 2 seconds?
alert("You changed the time!");
}
oldtime = getTime();
}
var oldtime = getTime();
setInterval(checkTime, 1000); // Check every second that the time is not off
Thử nghiệm trên Windows với Opera & FF và hoạt động hoàn hảo.
Rất tiếc, tôi không đọc kỹ mã này. – mattbasta
var last_time = new Date().getTime();
setInterval(function() {
var time = new Date().getTime();
var offset = time - last_time;
if(offset < 0 || offset > 1500) {
// Time has been changed
}
last_time = time;
}, 1000);
Về lý thuyết, điều này sẽ hiệu quả. Nó sẽ kiểm tra mỗi giây để đảm bảo rằng thời gian đã không được thay đổi. Lưu ý rằng tôi sử dụng 1100 mili giây vì hầu hết các phiên dịch JS không kích hoạt các sự kiện vào đúng thời gian được chỉ định.
Hy vọng điều này sẽ hữu ích!
Bạn có thể kiểm tra cứ sau 30 giây, v.v.
- 1. thời gian hệ thống khác với dấu thời gian apache -?
- 2. JavaScript setTimeout và thay đổi về các vấn đề gây ra thời gian hệ thống
- 3. Đặt thời gian hệ thống trong các kiểm tra rspec mà không thay đổi đồng hồ hệ thống
- 4. Thời gian thực hiện mà không thay đổi đồng hồ hệ thống Windows
- 5. JavaScript alert() tiến hệ thống thời gian bằng cách 12ms
- 6. Phát hiện nhàn rỗi hệ thống
- 7. Phát hiện xem đồng hồ hệ thống có thay đổi không?
- 8. Bắt Hệ thống Thời gian rảnh với Qt
- 9. Làm thế nào để xác định các hệ thống LTI với thời gian trễ trong Scipy?
- 10. Thay đổi ngày hệ thống lập trình
- 11. Thời gian hệ thống Windows với mili giây chính xác
- 12. Phát hiện xem thời gian hệ thống đã được chuyển ngược lại trong java hay bộ hẹn giờ thời gian bằng chứng
- 13. Thay đổi App.config tại Thời gian chạy
- 14. Linux, các tệp thời gian sửa đổi khác với thời gian hiện tại
- 15. thay đổi phát hiện trong một Object Javascript
- 16. Phát hiện JavaScript/Thống kê trình duyệt
- 17. Thay đổi thuộc tính hệ thống user.home
- 18. Cách phát hiện xem thuộc tính Hệ thống Java có thay đổi không?
- 19. Bắt getrusage() để đo thời gian hệ thống trong C
- 20. Hệ thống Prolog trong Javascript
- 21. Hệ thống theo dõi và phân tích thống kê thời gian thực trong Python
- 22. Thay đổi ngôn ngữ hệ thống C#
- 23. Cách lấy thời gian khởi động hệ thống Android
- 24. Thời gian hệ thống chính xác cao ở trăn
- 25. Gỡ lỗi, Unix. Chạy chương trình với thời gian khác với hệ thống
- 26. Đếm thay đổi trong dòng thời gian với MySQL
- 27. Các chiến lược để thay thế các đối tượng hệ thống
- 28. Cài đặt thời gian hệ thống của điện thoại ROOTED
- 29. Bắt thời gian hiện tại của hệ thống trong SQL Server
- 30. Nhận thời gian hiện tại (tính bằng mili giây) từ đồng hồ hệ thống trong Windows?
Bạn có một số vấn đề nghiêm trọng nếu người dùng thay đổi ** thời gian hệ thống ** của bạn. – Pointy
@Pointy: nhận xét đó có ý nghĩa hơn trước chỉnh sửa của tôi: p –
"của họ". tất nhiên, cảm ơn – AHOYAHOY