在加载之前从内容脚本向加载项发出消息
Emit message to add-on from content script 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
,但也不管用。可能是什么问题?
内容脚本在Firefox浏览器插件中访问的window
对象是一个代理对象,可能有点喜怒无常。使用window.addEventListener
即可。
window.addEventListener('beforeunload', function(e) {
# Do stuff then return undefined so no dialog pops up.
return undefined
});
onbeforeUnload事件不是同步的,因此浏览器在页面完成之前会垃圾收集页面。使用同步AJAX请求:
function Data()
{
var client = new XMLHttpRequest();
client.open("GET", "/request", false); // third paramater indicates sync xhr
client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
client.send({ visitTime: time });
client.onreadystatechange = emitter;
}
function emitter()
{
self.port.emit('pageView', { visitTime: time });
}
或者作为替代返回字符串。
相关文章:
- 列出IE加载项的Javascript
- 在OfficeJS Office加载项中标识活动的Office应用程序
- Office加载项don't与“;asp:”;
- 使用Microsoft Office.js加载项进行自动身份验证
- 在加载之前从内容脚本向加载项发出消息
- Firefox加载项:从选项卡获取文档
- Outlook加载项使用Javascript将附件保存到磁盘
- 使用Firefox加载项修改网站
- 用一个加载项绘制图像阵列
- Firefox加载项验证提供了document.write&innerHTML错误
- Mozilla Firefox加载项将不会启动
- 无法通过Microsoft Office JavaScript加载项对Trello进行身份验证
- Excel 2016 加载项如何更改列格式
- 如何使用 Office 365 加载项(以前称为 Office 相关应用程序)将功能区和用户可定义的函数添加到 Exce
- 从 Javascript 或 C# 中的 Office 365 Outlook 加载项创建.msg文件
- 检测 Office 加载项主机而不包括 office.js
- 如何在 Office 365 加载项中启用允许从沙盒属性顶部导航
- AngularJS中ngRepeat集合中的延迟加载项
- Office加载项-句柄'此加载项没有响应'警告消息
- 在受信任的页面内容和加载项之间传递消息