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

时间:2016-08-03 11:35:34

标签: javascript google-chrome-extension signalr

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

1 个答案:

答案 0 :(得分:0)

显然,一旦执行了一次,闭包内的变量就会被销毁,还有notificationHubProxy及其事件监听器。

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

关于偶然性,这是一种确保后台页面的DOM被初始化并且实际上在其中包含DOM元素的方法,只需在关闭前将<script src="background.js"></script>移动到background.html的末尾</body>代码。