Как я могу импортировать "класс" / тип объекта из моего popup.js в мой contentScript.js в расширении chrome, чтобы он был доступен обоим? - PullRequest
0 голосов
/ 28 декабря 2018

Я пишу расширение Chrome, где пользователь вводит имена веб-сайтов в popup.html, которые собираются / сохраняются в popup.js.Я хочу запомнить как последний раз, когда пользователь посещал веб-сайт, так и имя веб-сайта, поэтому я сохраняю веб-сайты в chrome.storage.local как объекты, созданные следующим конструктором:

class DelayedSite {
  constructor(domain) {
    this.lastVisit = 0; /* Stores the timestamp since last visit in seconds. */
    this.site = domain; /* The name of the site to delay */
  }
  /*
   * Updates the lastVisit property of the object to hold the 
   * timestamp in seconds since the last time the site was visited. 
   */
  visit() {
    this.lastVisit = Math.ceil((Date.now())/1000);
  }
}

Теперь я хочуобъявите / импортируйте этот тип в contentScript.js, чтобы при получении объектов из локального хранилища они были такого типа.Как я могу это сделать?В настоящее время, когда я получаю объект из chrome.storage.local, функция посещения не определена, и DelayedSite, кажется, не определен (я не могу привести к нему или создать новый объект через него) в contentScript.js.Как ни странно, я могу получить доступ к свойству объекта lastVisit, несмотря на эти другие проблемы.Одна вещь, которую я попробовал, и я думаю, что это наивный подход к проблеме (я новичок в JS, прости меня!), Это копирование и вставка класса так, чтобы он был в обоих файлах.Это ничего не меняет.

В случае, если это облегчает понимание, после вызова chrome.storage.set для сохранения массива объектов DelayedSite в popup.js я обращаюсь к ним с помощью следующего кода в contentScript.js:

chrome.storage.local.get({"addedSites":[], "restTime":60}, (result) => {
  let addedSites = result.addedSites;
  for (let i = 0; i < addedSites.length; i++) {
    let siteObj = addedSites[i]; 
    ...
  }
  ...
}

Что касается объекта в 4-й строке, как описано выше: я бы надеялся, что приведение этого к типу DelayedSite заставит его работать и будет иметь метод "посещения", но приведение не будет выполнено, и в текущем кодеМетод посещения не определен.Однако, как уже упоминалось, siteObj.lastVisit работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...