Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome 信号器事件上的Chrome扩展推送通知_Google Chrome_Google Chrome Extension_Signalr_Signalr Hub_Signalr.client - Fatal编程技术网

Google chrome 信号器事件上的Chrome扩展推送通知

Google chrome 信号器事件上的Chrome扩展推送通知,google-chrome,google-chrome-extension,signalr,signalr-hub,signalr.client,Google Chrome,Google Chrome Extension,Signalr,Signalr Hub,Signalr.client,我正在构建一个chrome扩展,它可以与服务器端的外部信号集线器进行通信 如果我在弹出页面中编写JS代码,我成功地将两者配置为相互通信,此方法的问题是如果扩展未打开,则无法获得更新(不响应引发的事件) 为了解决这个问题,我读到应该在background.js中编写事件处理程序,因此即使没有显示扩展弹出窗口,它仍然会响应事件。但是,我仍然需要支持在我的扩展上单击按钮来触发事件,这在读了多一点之后是不可能的,因为我无法访问后台文件中的DOM 所以我的问题是我如何解决这个问题?如何从客户端调用服务器信

我正在构建一个chrome扩展,它可以与服务器端的外部
信号集线器进行通信

如果我在弹出页面中编写JS代码,我成功地将两者配置为相互通信,此方法的问题是如果扩展未打开,则无法获得更新(不响应引发的事件)

为了解决这个问题,我读到应该在
background.js
中编写事件处理程序,因此即使没有显示扩展弹出窗口,它仍然会响应事件。但是,我仍然需要支持在我的扩展上单击按钮来触发事件,这在读了多一点之后是不可能的,因为我无法访问后台文件中的DOM

所以我的问题是我如何解决这个问题?如何从客户端调用服务器信号器中心中的函数(或发出ajax请求)?并在弹出窗口未打开时从服务器接收响应

所谓响应,我指的是更新
background.js
中的值,以及图标徽章中的值的简单+1,这将通知用户发生了什么

我对chrome扩展非常陌生,因此我非常感谢您的帮助

这是我当前的代码:

manifest.json

{
  "manifest_version": 2,

  "name": "Getting started ex1ample",
  "description": "This extension shows a Google Image search result for the current page",
  "version": "1.0",

  "background": {
    "scripts": ["jquery-2.1.4.min.js", "jquery.signalR-2.2.0.min.js", "background.js"],
    "persistent": false
  },
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },

  "permissions": [
    "activeTab",
    "http://localhost:61275/"
  ]
}
background.js

var singalR = {};

$(document).ready(function(){
    singalR.connection = $.hubConnection('http://localhost:61275/signalr/hubs', {useDefaultPath: false});
    singalR.connection.logging = true;
    singalR.roomIndexHubProxy = singalR.connection.createHubProxy('roomIndexHub');

    singalR.connection.start().done(function() {
        // Wire up Send button to call RoomIndexHubProxy on the server.
        console.log('Hub has started');
        $("#btn-join").click(function(){
            singalR.roomIndexHubProxy.invoke('test', 111);
        });
    });

    singalR.connection.error(function (error) {
        console.log('SignalR error: ' + error)
    });

    singalR.roomIndexHubProxy.on('test', function (val) {
        chrome.browserAction.setBadgeText({ text: val } );
    });
});
popup.html

<!doctype html>
<html>
  <head>      
    <script src="popup.js"></script> //empty for now
  </head>
  <body>
    <button id="btn-join">Join</button>
  </body>
</html>

//暂时空着
参加
服务器端集线器

public class RoomIndexHub : Hub
    {
        static int val = 0;
        public RoomIndexHub(){

        }

        public async Task test(int k)
        {
            var hubContext = GlobalHost.ConnectionManager.GetHubContext<RoomIndexHub>();
            val++;
            await Task.Delay(4000);
            hubContext.Clients.All.test(val.ToString());
        }
    }
公共类RoomIndexHub:Hub
{
静态int val=0;
公共RoomIndexHub(){
}
公共异步任务测试(INTK)
{
var hubContext=GlobalHost.ConnectionManager.GetHubContext();
val++;
等待任务。延迟(4000);
hubContext.Clients.All.test(val.ToString());
}
}

您是否尝试过设置背景页的生存期?将persistence设置为true,这样这个隐藏在后台的页面将一直处于“活动”状态,并且能够侦听传入的请求

“背景”:{
“脚本”:[“background.js”],
“持久”:正确

},
1。
setBadgeText
现在可以工作了吗?2.你看过“简单的一次性请求”吗。不,不在这个代码中。但是,如果我将background.js代码移动到popup.js,它就会工作(除了关于在后台运行的部分)。2.是的,我只是不确定这是否是正确的方法,因为我也看到了其他选择。你认为发短信是处理这个问题的最好方式吗。我认为允许的url应该有路径组件的
*
”http://localhost:61275/*“
2。如果您可以在后台脚本1中完成所有操作,则不会。你是对的。仍然在本地以开发模式运行,所以我没有遇到错误。2.据我所知,背景仅用作脚本而不是实际页面,即使它有html页面,我也无法将其加载到弹出窗口-对吗?啊,在这种情况下是的,弹出脚本向后台脚本的侦听器发送一条消息,请求数据,后台脚本通过
sendResponse
或向弹出脚本的侦听器发送一条新消息进行响应。无论如何,如果这就是问题所在,那么试着实现一些东西,如果出现问题,请将代码添加到问题中,因为我不确定在这一点上还能说些什么(我认为您可以通过谷歌搜索PopubBackground通信的示例)。