<script src="https://cdnjs.cloudflare.com/ajax/libs/localforage/1.9.0/localforage.js"></script>
result = await localforage.setItem('key', save_data);
console.log('Данные успешно сохранены:');
console.dir(result);
result = await localforage.getItem('key');
console.log('Данные успешно извлечены:');
console.dir(result);
...установка политики, которая включает «unsafe-inline», не будет иметь никакого эффекта.
Начиная с Chrome 46, встроенные скрипты можно добавить в белый список, указав в политике хэш исходного кода в кодировке base64. Этот хэш должен иметь префикс используемого алгоритма хеширования (sha256, sha384 или sha512).
'content_security_policy': Ignored insecure CSP value "'unsafe-inline'" in directive 'script-src'.
googleTableParse('https://docs.google.com/spreadsheets/d/<код документа>/edit');
// Функция для парсинга Google таблицы:
async function googleTableParse(link) {
var url = link.replace(/edit$/g, 'export?format=zip');
var response = await fetch(url);
var zip = await response.blob();
var archive = await new JSZip().loadAsync(zip);
var files = Object.keys(archive.files);
var lists = Object.create(null);
for (var n = 0; n < files.length; n++) {
if (!files[n].includes('/') && files[n].includes('.html')) {
var blob = await archive.files[files[n]].async('blob');
var html = await blob.text();
var name = files[n].replace(/\.html$/g, '');
lists[name] = tableParser(html);
}
}
console.log('Таблица и все листы в нём успешно спарсены:');
console.dir(lists);
}
// Функция для парсинга html-кода таблицы из скачанного архива:
function tableParser(html) {
var doc = new DOMParser().parseFromString(html, "text/html");
var th = doc.querySelector('table > tbody > tr').querySelectorAll('th, td');
var title = [];
for (var i = 0; i < th.length; i++) {
title.push(th[i].innerText);
}
var tr = doc.querySelectorAll('table > tbody > tr');
var array = [];
for (var i = 1; i < tr.length; i++) {
var td = tr[i].querySelectorAll('th, td');
var obj = {};
var add = 0;
for (var y = 1; y < td.length; y++) {
td[y].innerHTML = td[y].innerHTML.replace(/\<br\>/g, '{перенос строки}');
obj[title[y]] = td[y].innerText.replace(/\{перенос строки\}/g, "\n").trim();
if (obj[title[y]] !== '') {
add = 1;
}
}
if (add) {
array.push(obj);
}
}
return array;
}
window.addEventListener('message', function(event) {
var message = event.data;
console.log('Получено сообщение из фрейма: ' + message);
});
window.parent.postMessage('Какое-нибудь произвольное сообщение', '*');
chrome.tabs.onCreated.addListener(function(tab) {
chrome.tabs.update(tab.id, {
autoDiscardable: false
});
});
chrome.tabs.onReplaced.addListener(function(tabId) {
chrome.tabs.update(tabId, {
autoDiscardable: false
});
});
chrome.runtime.onInstalled.addListener(function(details) {
chrome.tabs.query({}, function(tabs) {
tabs.forEach(function(tab) {
chrome.tabs.update(tab.id, {
autoDiscardable: false
});
});
});
});