Мне нужно обновить sh getAuthToken после его истечения. Я помещаю вызов getAuthToken в фоновый режим. js и сохраняю переменную в хранилище, чтобы скрипт содержимого мог ее получить. Все идет нормально. Когда токен правильно истекает, я получаю код 401 из API Google Drive, затем отправляю сообщение из скрипта контента в фоновый режим. js, чтобы использовать removeCachedAuthToken, а затем повторяю вызов getAuthToken, и я go вернуться к токену в хранилище. Все это работает, пользователь перезагружает страницу, сохраняя расширение открытым, чтобы передать сообщение из скрипта контента в фоновый режим. js и перезагрузка скрипта контента снова получает токен, чтобы сделать вызовы API google drive.
Можно ли хотя бы обновить sh страницу, а не только две?
Манифест. js
{
"name": "Project",
"version": "1.0",
"manifest_version": 2,
"description": "Project",
"icons": {
"128": "img/path_128.png",
"64": "img/path_64.png",
"32": "img/path_32.png"
},
"browser_action": {
"default_title": "Project"
},
"browser_action": {
"default_title": "Project",
"default_popup": "popup.html"
},
"oauth2": {
"client_id": "******.apps.googleusercontent.com",
"scopes":["https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive","https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive.metadata"]
},
"permissions": [
"storage",
"identity"
],
"content_scripts": [
{
"css": ["css/google-docs.css"],
"js": ["js/jquery-3.5.0.min.js", "js/google-docs.js"]
}
],
"content_security_policy": "script-src https://code.jquery.com https://apis.google.com 'self'; object-src 'self'"
}
Фон. js
chrome.identity.getAuthToken({interactive: true}, function(token) {
/*chrome.storage.local.set({token: token}, function() {
});*/
console.log(token);
chrome.storage.local.set({'token': token}, function() {
// Notify that we saved.
console.log('Settings saved');
});
});
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
console.log(request.greeting);
if (request.greeting == "401"){
chrome.storage.local.get('token', function(data) {
var token = data.token;
chrome.identity.removeCachedAuthToken({token: token}, function (){
alert('removed');
chrome.identity.getAuthToken({interactive: false}, function(token) {
console.log(token);
chrome.storage.local.set({'token': token}, function() {
// Notify that we saved.
console.log('Settings saved');
sendResponse({farewell: "success"});
});
});
});
});
}
});
Содержание. js (google-docs. js)
chrome.storage.local.get('token', function(data) {
var token = data.token;
console.log(token);
AjaxCall(token);
});
// error code ajax function
error: function (jqXHR, textStatus, errorThrown) {
console.log('Error: ' + errorThrown + ' / ' + textStatus) + console.log(jqXHR);
a = true;
if(jqXHR.responseJSON.error.code){
token = refreshAuthTokenCall();
}
}
function refreshAuthTokenCall(){
chrome.runtime.sendMessage({greeting: "401"}, function(response) {
console.log(response.farewell);
if(response.farewell == "success"){
chrome.storage.local.get('token', function(data) {
var token = data.token;
console.log(token);
AjaxCall(token);
});
}
});
}