Tengo un script de contenido que mide el tiempo que un usuario ve una página. Para hacer esto, inserto un script de contenido en cada página, inicio un temporizador y luego emito un mensaje de nuevo al complemento cuando se desencadena el evento onbeforeunload
.¿Emitir mensaje al add-on de la secuencia de comandos de contenido antes de la descarga?
Sin embargo, el mensaje nunca parece pasar al script de fondo.
Teniendo en cuenta que mi main.js
se parece a esto:
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");
});
}
});
me puede enviar un mensaje a main.js
usando el siguiente código ningún problema.
self.port.emit('pageView', { visitTime: time });
Tengo un problema cuando intento hacerlo ya que el usuario se va de la página sin embargo. El mensaje no se recibe cuando lo hago de esta manera:
$(window).bind('onbeforeunload', function(e) {
self.port.emit('pageView', { visitTime: time });
// This should prevent the user from seeing a dialog.
return undefined;
});
He intentado escuchar beforeunload
también, que no funciona bien. ¿Cual podría ser el problema?
¿Está vinculando el 'onbeforeunload' después de que el documento esté listo? En segundo lugar, ¿intentó adjuntar el evento directamente? 'window.onbeforeunload = function (e) { self.port.emit ('pageView', {visitTime: time}); // Esto debería evitar que el usuario vea un cuadro de diálogo. return undefined; }; 'En jsfiddle vinculando el' onbeforeunload' con jQuery no funciona, la forma directa funciona –
Estoy bastante seguro de que lo intenté de manera directa (hice la pregunta hace unos días) pero intentaré de nuevo y Regresar a ti. La vinculación está sucediendo después de jQuery listo, así que debería estar bien. –
[prueba este violín] (http://jsfiddle.net/CD6DV/1/) y pon el jquery y javascript en orden diferente. Si pongo 'onbeforeunload' en jquery veo que 100% se maneja mediante javascript y no se maneja con jQuery. Si 'beforeunload' se usa en jQuery, veo un comportamiento intermitente. Por lo tanto, creo que javascript es el más estable. Otra cosa en la que puede rebotar: no todo el código parece ejecutarse. Intente agregar 'alert (" something ");' en el código y no verá que se está ejecutando. Si reemplaza el 'return undefined' con una cadena, al menos debería ver un cuadro de diálogo para confirmar que salió de la página –