Расширение Chrome - chrome.extension.sendRequest возвращает пустой ответ - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть расширение Chrome. Я пытаюсь добавить функции с возможностью включения / выключения.

У меня есть флажки в popup.html, которые нажимают, записывают значение полей в localStorage.Затем в моем скрипте контента я отправляю запрос на значение.

Раньше у меня был только 1 запрос, и он работал нормально.Затем я попытался добавить еще один, и что бы я ни пытался, это не сработает, даже если я закомментирую другой запрос.Вот код в моем скрипте содержимого:

autopoke = 'default';
secondbutton = 'default';

chrome.extension.sendRequest({localstorage: "autopoke"}, function(response)
{ 
if (response.autopoke == "true")
        {
        autopoke = true;
        }
})

chrome.extension.sendRequest({localstorage: "secondbutton"}, function(response)
{ 
console.log(response) //for debugging
if (response.secondbutton == "true")
        {
        secondbutton = true;
        }
})

Независимо от того, является ли переменная localStorage "secondbutton" значением true или нет, вывод второго запроса будет пустым.Вывод на консоль Chrome также является пустым объектом.Я попытался переместить эту строку в первый запрос, и он вывел объект, в котором где-то было «autopoke = false».

Чтобы убедиться, что значение localStorage установлено, я добавил это в popup.html:

alert(localStorage.secondbutton);

И когда я нажимаю на всплывающее окно, появляется предупреждение, говорящее true .Я действительно не могу понять это, я даже пытался setTimeout () подождать несколько секунд, но результаты те же: пустой вывод для "секундной кнопки" localStorage.

background.html:

<html>

<script type='text/javascript'>
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {

if (request.localstorage == "autopoke") {
sendResponse({autopoke: localStorage.autopoke});
}
else {
sendResponse({}); // snub them.
}    
});
</script>

</html>

popup.html:

<html>
<head>

<style type='text/css'>
    body
    {
        font-size:10pt;
        width:220px;
        font-family: "Verdana";
        font-weight: bold;
        text-shadow: 2px 2px 2px green;
    }

</style>

<script type='text/javascript'>
    function update()
    {
    localStorage.autopoke = document.myform.check.checked;
    localStorage.secondbutton = document.myform.secondbutton.checked;
    }
</script>
</head>
<body>
    <form name='myform'>
    <table border="0">
        <tr>    
            <td>
                <label for='check'>Autopoke:</label> 
            </td>   
            <td>    
                <input type='checkbox' id='check' onclick='update()'/>
            </td>
        </tr>

        <tr>
            <td>
                <label for='secondbutton'>Additional Poke Button:</label> 
            </td> 
            <td>
                <input type='checkbox' id='secondbutton' onclick='update()'/>
            </td>
        </tr>

    </table>
    </form>
    <script type='text/javascript'>
    if( localStorage.autopoke == "true")
    {
      document.myform.check.checked=true;
    }
    if ( localStorage.secondbutton == "true" )
    {
      document.myform.secondbutton.checked=true;
    }
    </script>
</body>
</html>

1 Ответ

1 голос
/ 09 ноября 2011

Хорошо, давайте посмотрим, что здесь происходит. Вы впервые отправляете запрос с localstorage = "autopoke". Оператор if в обработчике запросов удерживает и отправляет обратно значение localStorage.autopoke. Теперь, почему он ничего не отвечает, когда вы отправляете localstorage = "secondbutton"? Ну, в вашем коде нет места, чтобы возвращалось значение. Попробуйте код ниже, это должно сработать.

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) 
{
    if (request.localstorage == "autopoke")
    {
        sendResponse({autopoke: localStorage.autopoke});
    }
    else if (request.localstorage == "secondbutton")
    {
        sendResponse({secondbutton: localStorage.secondbutton});
    }
    else
    {
        sendResponse({}); // snub them.
     }    
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...