ユーザーがページを閲覧する時間を測定するコンテンツスクリプトがあります。これを行うには、コンテンツスクリプトを各ページに挿入し、タイマーを開始して、onbeforeunload
イベントがトリガーされたときにアドオンにメッセージを戻します。コンテンツスクリプトからアドオンへメッセージを送信onbeforeunload?
しかし、メッセージはバックグラウンドスクリプトに渡されることはありません。
私main.js
はこのようになっていることを考える:
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");
});
}
});
私は、次のコードには問題を使用していないmain.js
にメッセージを送ることができます。
self.port.emit('pageView', { visitTime: time });
ただし、ユーザーがページを離れるときに問題が発生します。私はこのようにそれを行うと、メッセージが受信されることはありません:
$(window).bind('onbeforeunload', function(e) {
self.port.emit('pageView', { visitTime: time });
// This should prevent the user from seeing a dialog.
return undefined;
});
私はどちらか動作しませんので、あまりにもbeforeunload
のために聞いてみました。何が問題なの?
文書の準備が整った後に 'onbeforeunload'をバインドしていますか?第二に、あなたは直接イベントを添付しようとしましたか? 'window.onbeforeunload = function(e){ self.port.emit( 'pageView'、{visitTime:time}); //これにより、ユーザーはダイアログが表示されなくなります。 戻り値は未定義です。 }; 'jQueryでjQueryでjQueryをバインドするとjQueryが機能しません。直接的な方法では動作します –
私は直接的な方法(数日前に質問をしました)を試みたと確信していますが、あなたに戻ってください。バインディングはjQueryの準備が整った後に行われます。 –
[このフィドルを試してください](http://jsfiddle.net/CD6DV/1/)、jqueryとjavascriptの順序を入れてください。私がjQueryに 'onbeforeunload'を置くと、私は100%javascriptによる処理とjQueryによる処理を見ることになります。 'beforeunload'がjQueryで使用されると、私は断続的な動作を見ます。したがって、私はjavascriptが最も安定したものだと思っています。あなたが跳ね返るかもしれない別のこと:すべてのコードが実行されているとは限りません。コード内に 'alert(" something ");'を追加しようとすると、実行されていません。 'return undefined'を文字列に置き換えると、少なくともページを残すことを確認するダイアログが表示されます。 –