2012-04-01 27 views
13

Event.timeStampLàm thế nào để thi đua Event.timeStamp

Thuộc tính timestamp phải trả về giá trị nó đã được khởi tạo. Khi một sự kiện được tạo ra thuộc tính phải được khởi tạo số mili giây đã trôi qua kể từ 00:00:00 UTC vào ngày 1 tháng 1 năm 1970.

Một có thể bẫy cả new Eventdocument.createEvent để thiết lập các dấu thời gian phù hợp nhưng làm thế nào Bạn có đánh chặn các sự kiện được tạo ra và gửi đi bởi trình duyệt không?

Có thể thêm trình xử lý sự kiện (giai đoạn chụp) vào số document lắng nghe loại sự kiện "mọi" và ghi timeStamp gần thời gian công văn nhưng đó sẽ là một bản hack xấu xí.

  • Có cách nào tốt hơn để mô phỏng Event.timeStamp không?
  • Có bất kỳ bẫy nào có khả năng chặn new Event/new CustomEventdocument.createEvent.
  • Có cách nào khác để tạo sự kiện theo chương trình không?
  • Có bất kỳ sự cố nào có thể xảy ra khi thêm trình xử lý sự kiện vào document và đặt thủ công timeStamp càng sớm càng tốt?
+1

Câu hỏi chính xác là gì? – gdoron

+0

@gdoron làm cho nhiều obvouis – Raynos

+2

Ngoài sự tò mò, lợi ích của việc mô phỏng Event.timeStamp là gì? – Coffee

Trả lời

1

Tùy chọn khác là thêm dấu thời gian vào trình xử lý. Có lẽ, chỉ có mã bạn viết thực sự quan tâm đến dấu thời gian, và kể từ khi bạn kiểm soát mã bạn viết, bạn có thể sử dụng chức năng trợ giúp "lắng nghe" của riêng bạn. Một cái gì đó như:

var myAddListener = function(name, fn, scope){ 
    addEventListener(name, function(e){ 
     if(!e.timeStamp) e.timeStamp = +new Date; 
     fn.apply(scope || null, arguments); 
    }); 
} 

Miễn là mã phụ thuộc vào dấu thời gian của bạn được đính kèm với điều này, bạn vẫn ổn. Lưu ý, tôi đã thêm một đối số 'phạm vi' trong khi tôi đang ở đó ... đó là một cách thuận tiện để bảo toàn 'điều này' khi sử dụng các trình lắng nghe trong các cá thể lớp.

3

Tôi không thể tìm thấy bất kỳ nơi nào để chặn việc tạo sự kiện được tạo bởi trình duyệt thay vì theo mã người dùng. "Hack xấu xí" của bạn dường như làm việc okay mặc dù:.

addEventListener("click", function (e) { 
    Object.defineProperty(e, "timeStamp", { 
     get: function() { return 4; } 
    }); 
}, true); 

Rõ ràng bạn sẽ phải gọi addEventListener một loạt các lần với bất cứ tên sự kiện bạn quan tâm Lưu ý rằng thiết lập timeStamp trực tiếp không có tác dụng, nhưng defineProperty hoạt động. Tôi chỉ thử nghiệm Chrome và IE9; Tôi chắc chắn interop sẽ là một mớ hỗn độn vì chúng tôi đang sử dụng một phương pháp getter.

+0

Làm thế nào bạn có thể đảm bảo người nghe sự kiện này được thực hiện _before_ tất cả những người khác nghe "nhấp"? – giorgiga

+0

@giorgiga Đó là giai đoạn chụp trên đối tượng 'cửa sổ' toàn cục, do đó, những thứ duy nhất có thể được thực hiện trước khi nó là các trình nghe sự kiện thu khác đã được định nghĩa trên' window', điều này khá hiếm. – sethobrien

+0

Bạn nghĩ gì về việc thêm séc vào thuộc tính 'timeStamp'? – pomeh

Các vấn đề liên quan