Tôi có một tập lệnh nội dung mà thời gian người dùng xem một trang. Để thực hiện việc này, tôi chèn một tập lệnh nội dung vào mỗi trang, bắt đầu hẹn giờ và sau đó phát ra một tin nhắn trở lại tiện ích khi sự kiện onbeforeunload
được kích hoạt.Phát hiện tin nhắn tới tiện ích bổ sung từ tập lệnh nội dung onbeforeunload?
Tuy nhiên, thông báo dường như không được chuyển sang tập lệnh nền.
Cho rằng main.js
của tôi trông như thế này:
var pageMod = require('page-mod'),
self = require("self");
pageMod.PageMod({
include: "http://*",
contentScriptFile: [self.data.url('jquery.min.js'),
self.data.url('content.js')],
onAttach: function(worker) {
worker.port.on('pageView', function(request) {
console.log("Request received");
});
}
});
tôi có thể gửi một thông điệp tới main.js
sử dụng đoạn mã sau không có vấn đề.
self.port.emit('pageView', { visitTime: time });
Tôi gặp sự cố khi cố gắng thực hiện khi người dùng rời khỏi trang. Tin nhắn không bao giờ nhận được khi tôi làm như sau:
$(window).bind('onbeforeunload', function(e) {
self.port.emit('pageView', { visitTime: time });
// This should prevent the user from seeing a dialog.
return undefined;
});
Tôi cũng đã thử nghe cả beforeunload
cũng không hoạt động. Điều gì có thể là vấn đề?
Bạn có ràng buộc 'onbeforeunload' sau khi tài liệu sẵn sàng không? Thứ hai, bạn có cố gắng đính kèm sự kiện trực tiếp không? 'window.onbeforeunload = function (e) { self.port.emit ('pageView', {visitTime: time}); // Điều này sẽ ngăn người dùng nhìn thấy hộp thoại. trả lại không xác định; }; 'Trong jsfiddle ràng buộc' onbeforeunload' với jQuery không hoạt động, cách trực tiếp không hoạt động –
Tôi khá chắc chắn tôi đã thử cách trực tiếp (đưa ra câu hỏi cách đây vài ngày) nhưng tôi sẽ thử lại và lấy lại cho bạn. Sự ràng buộc đang xảy ra sau khi jQuery sẵn sàng để nó ổn. –
[thử này fiddle] (http://jsfiddle.net/CD6DV/1/) và đặt jquery và javascript theo thứ tự khác nhau. Nếu tôi đặt một 'onbeforeunload' trong jquery tôi thấy 100% xử lý bởi javascript và không xử lý bởi jQuery. Nếu 'beforeunload' được sử dụng trong jQuery tôi thấy hành vi không liên tục. Vì vậy, tôi thinkg javascript là ổn định nhất. Một điều khác mà bạn có thể bị trả về: Không phải mã nào cũng có vẻ được thực hiện. Hãy thử thêm 'alert (" something ");' trong mã và bạn sẽ không thấy nó đang được thực thi. Nếu bạn thay thế 'return undefined' bằng một chuỗi, ít nhất bạn sẽ thấy một hộp thoại để xác nhận rời khỏi trang –