1

是否可以使用消息传递 api 将请求发送到将要收听它的同一页面?它似乎不起作用!

一种解决方案是在其他页面上设置侦听器,然后将请求重定向回父页面。但这是一个黑客,我真的不想这样做:(

编辑(更新)

背景.html (0)

chrome.extension.sendRequest({action:'foo'}, function(response) {
    //do stuff
});

index.html (1)

chrome.extension.sendRequest({action:'foo'}, function(response) {
    //do stuff
});

背景.html (2)

chrome.extension.onRequest.addListener(function(request,sender,sendResponse) {
    if(request.action=='foo') //do stuff
});
...
...
//the code form (0)

从上面(1)有效,但(0)无效:(

编辑 2

从 (2)

chrome.extension.onRequest.addListener(function(request,sender,sendResponse) {
    switch(request.action) {
        case 'foo': //do some stuff here
        break;
    }
});

上面的开关已经变得相当长了..我猜大约有 30 个条目..加上除了戳事件监听器之外没有办法调用开关。(或者我错过了什么?)

我想case 'foo':在同一个文件中执行它下面的代码,因此我尝试在(0)中调用它。

4

1 回答 1

3

正如您已经发现的那样,您不能真正向同一页面发送请求,因此作为一种解决方法,我将执行以下操作:

function requestHandler(request, sendResponse) {
    switch(request.action) {
        case 'foo':
            sendResponse(true);
            break;
        }
}

chrome.extension.onRequest.addListener(function(request,sender,sendResponse) {
    requestHandler(request, sendResponse);
});

//calling handler directly
requestHandler({action:"foo"}, function(result) {
    //response
});
于 2011-08-07T16:47:11.257 回答