我正在开发我的第一个chrome扩展程序。 我已经实现了Signal R 2来显示chrome通知。 问题是如果扩展是偶像一段时间它会停止显示通知,同时如果我调试background.js(通过打开扩展的后台页面)它会开始显示通知。
这是我的信号R实现
[HttpGet]
public void SendNotificationYealink(string mac, string ip, string model, string active_url, string active_user, string active_host, string local, string remote, string display_local, string display_remote, string call_id, string action)
{
var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
context.Clients.All.addNotificationToExtension("Arslan", "Active_User =" + active_user +
", Local =" + local + ", Remote =" + remote + ", Display_Local =" + display_local + ", Display_Remote =" + display_remote + ", Call Id=" + call_id);
}
和我的background.js
$(function () {
var connection = $.hubConnection();
connection.url = 'http://localhost:8089/signalr';
var notificationHubProxy = connection.createHubProxy('notificationHub');
notificationHubProxy.on('addNotificationToExtension', function (callFrom, phoneNumber) {
var firstRun =
{
type: "basic",
title: callFrom,
message: phoneNumber,
iconUrl: "icon.png"
}
chrome.notifications.create(firstRun);
});
connection.start().done(function () {
console.log('Connection established.');
});
})
答案 0 :(得分:0)
显然,一旦执行了一次,闭包内的变量就会被销毁,还有notificationHubProxy
及其事件监听器。
删除代码周围的($(function () { ... })()
包装器,它在扩展程序的后台页面中没有用处,因为它在自己的隔离环境中运行,因此您不必隐藏变量任何人。
关于偶然性,这是一种确保后台页面的DOM被初始化并且实际上在其中包含DOM元素的方法,只需在关闭前将<script src="background.js"></script>
移动到background.html
的末尾</body>
代码。