Как получить цвет из chrome.storage в contentScript - PullRequest
0 голосов
/ 08 января 2019

Я помещаю значение цвета в chrome.storage в моем background.js так:

document.addEventListener('DOMContentLoaded', function() {
    var c = document.getElementById('button_confirm');
    var ic = document.getElementById('input_color');

    c.addEventListener('click', function() {

        chrome.storage.loc.set({"value": ic.value}, function() {
        console.log("The value stored was: " + ic.value);
    });

    });
});

Затем я хочу получить его из хранилища в contentScript и применить th-значение в качестве цвета границы следующим образом:

    var links = document.querySelectorAll("link[rel]");
var as = document.querySelectorAll("a[href]"); //doplnit i kdyby nebyl odkaz na a ale například button
var hovno;


for (var i = 0, len = links && links.length; i < len; ++i)
{
  var link = links[i];
  var a = as[i];

  if (link.rel == "prerender")
  {
    chrome.runtime.sendMessage({ "newIconPath" : "48.png" });

    var prerendered_href = link.href; 

    for (var j = 0, len = as && as.length; j < len; ++j)
    {
        var a = as[j];

        if(a != "")
        {
            if(extractURL(prerendered_href) == extractURL(a.href)){
                chrome.storage.local.get(["value"], function(result) {
                    a.setAttribute("style", "border: 2px dashed "+ hovno +"; display: inline-block !important;");
                });
            }
        }
    }   

  }
  else{
    chrome.runtime.sendMessage({ "newIconPath" : "48-gray.png" });
  }
}   



function extractURL(Adress){
    var pathname = new URL(Adress).pathname;
    var domain = new URL(Adress).hostname.replace("www.","");

    return domain+pathname;
}

Всегда выдает ошибку, говоря, что "hovno" не определено. Что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Это должно быть .local вместо .loc, а функция .get является асинхронной, она принимает функцию в качестве обратного вызова. Это означает, что оператор a.setAttribute(....) выполняется до установки переменной hovno.

Чтобы это исправить, вы можете сделать что-то вроде этого:

chrome.storage.local.get(["value"], function(result) {
    a.setAttribute("style", "border: 2px dashed "+ result.value +"; display: inline-block !important;");
});
0 голосов
/ 08 января 2019

Переместить последнюю строку внутрь функции обратного вызова, например:

chrome.storage.local.get(["value"], function(result) {
      console.log('Value currently is ' + result.value);
      hovno = result.value;
      a.setAttribute("style", "border: 2px dashed "+ hovno +"; display: inline-block !important;");
    });
...