Я написал расширение Chrome, которое добавляет счетчик символов для некоторых элементов ввода. Для этого нет пользовательского интерфейса, он просто вводит код подсчета символов, если пользователь находится на определенной странице.
Существует ограничение на количество символов, которые должны отображаться на входах. Сначала я написал его, чтобы просто отобразить количество символов, но потом решил, что было бы неплохо, если бы пользователь мог выбрать, сколько у него осталось символов. Поэтому я решил создать страницу параметров.
В какой-то момент на моей странице настроек я делаю это:
localStorage["count"] = count; // count is the string "countUp" or "countDown"
Оказывается, я не могу получить доступ к localStorage options.html из contentscript.js, поэтому я неохотно создал страницу background.html, которая прослушивает запросы из ContentScript и возвращает значения localStorage, которые запрашивает скрипт содержимого.
В содержании (упрощенно)
var countOption;
chrome.extension.sendRequest(
{method: "localStorage", key: "count"},
function(response){
countOption = response.data;
console.log(countOption); // returns "countUp"
}
);
console.log(countOption); // returns undefined
if(countOption === "countUp") {
doSomething();
} else {
doSomethingElse();
}
Фоновая страница
<script type="text/javascript">
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
if(request.method === "localStorage") {
sendResponse({data: localStorage[request.key]});
} else {
sendResponse({});
}
}
);
</script>
Проблема в том, что я не могу присвоить значение countOption
, чтобы оно было доступно в рамках остальной части моего сценария. Когда я назначаю его в ответе chrome.extension.sendRequest
, this
является оконным объектом, поэтому я попытался объявить countOption
глобально, но в остальной части моего сценария оно все равно undefined
.
Кто-нибудь может увидеть, где я иду не так? Спасибо.