Передача сообщения из скрипта контента в расширениях Chrome

Я хочу запустить сценарий содержимого, чтобы определить первое изображение, которое куда-то ссылается, и вернуть ссылку фоновому сценарию. Но я не могу передавать сообщения между ними, и я не знаю, почему. Большая часть кода является комментарием, я пытаюсь просто проверить, выполняется ли сценарий контента, сказав ему изменить первый заголовок на «тест» (поскольку единственное, что я могу сделать без сообщений, — это изменить HTML и CSS страницы) . Код следует: РЕДАКТИРОВАТЬ: полный обновленный код

Фоновый скрипт:

chrome.browserAction.onClicked.addListener(function () {
chrome.tabs.query({active:true, currentWindow:true}, function(tabs)
{
    chrome.tabs.executeScript(tabs[0].id, {file:"content.js"}, function ()
    {
        console.log("sending first time");
        console.log(tabs[0].id);
        chrome.tabs.sendMessage(tabs[0].id,{test: "test"}, function (response)
        {
            if (undefined == response)
            {
                console.log ("first one didn't work");
                chrome.tabs.sendMessage(tabs[0].id, {test: "test"}, function (response)
                {
                    console.log(response.test);
                });
            }
        });
    });
});
});

Скрипт контента:

chrome.runtime.onMessage.addListener( function (msg, sender, sendResponse)
{
/*var test1 = document.getElementsByTagName("h1")[0];
test1.innerHTML="test";*/
sendReponse({test: "123"});
/*var parentList =document.getElementsByTagName("a");
var link = "";
var child;
for (var i=2; i<parentList.length;i++)
{
    child=parentList[i].firstChild;
    if ("IMG"==child.nodeName)
    {
        link=parentList[i].href;
        break;
    }
}
teste1.innerHTML=link;
var answer = new Object();
Answer.link = link;
teste1.innerHTML=answer.link;
sendResponse({messager:answer});*/
});

person rvcam    schedule 15.02.2014    source источник
comment
Возможно, проблема связана с манипуляцией домом, а не с сообщением. Почему бы не попробовать выполнить обратный вызов sendResponse из сценария содержимого, а в фоновом сценарии записать ответ в console.log.   -  person levi    schedule 15.02.2014
comment
Кроме того, вы проверили консоль ошибок вкладок? Я считаю, что там будут отображаться ошибки или console.logs из сценария содержимого.   -  person levi    schedule 15.02.2014
comment
Леви: Даже если я поставлю простое выражение, такое как предупреждение, если оно находится внутри chrome.tabs.query, оно не будет выполнено. Кроме того, я не могу писать в консоль. Это еще одна проблема, для которой я открыл еще один вопрос.   -  person rvcam    schedule 15.02.2014
comment
Обновление ситуации: благодаря сообщению levi в моем другом вопросе о консоли я увидел синтаксическую ошибку в моем фоновом сценарии. Теперь команды в любом месте фонового скрипта выполняются нормально. Проблемы вызывает только сценарий контента.   -  person rvcam    schedule 15.02.2014
comment
Согласно документам - The argument should be any JSON-ifiable object. Попробуйте отправить объект   -  person levi    schedule 16.02.2014
comment
Я попытался. Произошла ошибка времени выполнения; он сказал, что не может найти члена неопознанного   -  person rvcam    schedule 16.02.2014
comment
Пожалуйста, опубликуйте свой полный обновленный код   -  person levi    schedule 16.02.2014
comment
@levi опубликовал это несколько дней назад. Вы тоже застряли?   -  person rvcam    schedule 18.02.2014


Ответы (1)


Я тестировал расширение на самой странице расширения. Но, похоже, вы не можете внедрить в него javascript (вероятно, потому что это страница настроек браузера). На других страницах это работало хорошо.

person rvcam    schedule 20.02.2014