Я пишу простое расширение chrome, которое содержит всплывающее окно HTML (popup.html
) с соответствующим файлом popup.js
. Когда пользователь нажимает кнопку в popup.js
, я хотел бы получить и установить значение, используя chrome.storage.local.get
и chrome.storage.local.set
. После этого процесса я хотел бы уведомить пользователя, что обновление завершено (с помощью простого jQuery). Однако я поместил этот код обновления jQuery в обратный вызов моего chrome.storage.local.set
, и при нажатии кнопки обновление Dynami c никогда не происходит, поэтому я подозреваю, что обратный вызов никогда не выполнялся. Я считаю, что это так, потому что я поместил фрагмент уведомления внутри обратного вызова chrome.storage.local.get
и смог отобразить правильное сообщение:
popup.html
:
<html>
<head>
<title>Test Extensio</title>
<script src='jquery.min.js'></script>
<script src='popup.js'></script>
</head>
<body>
<button class='get-notified'>Run Test</button>
<div class='update-display'></div>
</body>
</html>
popup.js
:
$(document).ready(function(){
$('body').on('click', '.get-notified', function(){
chrome.storage.local.get(['counter'], function(result){
var new_count = result.counter === undefined ? 1 : parseInt(result.counter)+1
chrome.storage.local.set({'counter':new_count}, function(){
$('.update-display').html(`The count is: ${new_count}`)
//this is never executed
});
});
});
});
В приведенном выше примере кода сообщение счетчика никогда не отображается. Однако, когда я удаляю chrome.storage.local.set
и запускаю обновление внутри обратного вызова chrome.storage.local.get
, оно действительно работает:
chrome.storage.local.get(['counter'], function(result){
var new_count = result.counter === undefined ? 1 : parseInt(result.counter)+1
$('.update-display').html(`The count is: ${new_count}`)
//this works
});
Почему $('.update-display').html(...)
работает в первом обратном вызове, обратном вызове chrome.storage.local.get
, но не внутренний обратный вызов chrome.storage.local.set
?
Мой manifest.json
файл:
{
"manifest_version": 2,
"name": "Test extension",
"description": "A Description coming soon",
"version": "2.0",
"browser_action": {
"default_icon": "/images/icon.png",
"default_popup": "popup.html"
},
"background" : {
"scripts" : ["jquery.min.js", "popup.js"]
},
"permissions": [
"storage",
"activeTab",
"declarativeContent",
"webNavigation",
"unlimitedStorage",
"tabs",
"cookies",
"webRequest",
"webRequestBlocking",
"http://*/",
"https://*/",
"http://fonts.googleapis.com/",
"https://fonts.googleapis.com/"
],
"web_accessible_resources": ["popup.html"],
....
}
Кто-нибудь знает, почему может возникнуть такое непонятное поведение? Спасибо большое!