Расширения chrome: extension.sendRequest (передача сообщений) на ту же страницу? - PullRequest
1 голос
/ 07 августа 2011

возможно ли отправить запрос, используя api для передачи сообщений на ту же страницу, которая будет его прослушивать? это не похоже на работу!

Одним из решений является настройка прослушивателя на другой странице, а затем перенаправить запрос обратно на родительскую страницу. Но это взлом, и я действительно не хочу этого делать: (

РЕДАКТИРОВАТЬ (обновлено)

background.html (0)

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

index.html (1)

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

background.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).

1 Ответ

3 голосов
/ 07 августа 2011

Как вы уже узнали, вы не можете отправить запрос на ту же страницу, поэтому в качестве обходного пути я бы сделал следующее:

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
});
...