我必须重新加载 chrome 扩展才能显示通知

I have to reload chrome extension to show notification

我正在开发我的第一个 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.');
});
})

显然,闭包内的变量一旦执行一次就会被销毁,连同 notificationHubProxy 及其事件侦听器。

删除代码周围的 ($(function () { ... })() 包装器,它在扩展程序的后台页面中的作用为零,因为它在自己的隔离环境中运行,因此您不必对任何人隐藏变量。

万一这是一种确保后台页面 DOM 已初始化并且您实际上在其中包含 DOM 元素的方法,只需将 <script src="background.js"></script> 移动到在结束 </body> 标记之前 background.html 结束。