Условия onPageChanged не загружаются - PullRequest
0 голосов
/ 24 октября 2018

Я создаю расширение Chrome на определенном веб-сайте, оно должно показывать всплывающее окно.

Список веб-сайтов превышает 1000, и я не могу написать условие одно за другим, поэтому я получаю данные с помощью запроса GET, анализирую их и создаю условие на основе этого.

function conditions() {
  var conditionList = []
  var request = new XMLHttpRequest();
  request.open('GET', 'https://raw.githubusercontent.com/vaibhavmule/ycinfo/master/ycstartup.json', true);

  request.onload = function() {
    if (request.status >= 200 && request.status < 400) {
      // Success!
      var ycStartups = JSON.parse(request.responseText);
      Object.keys(ycStartups).forEach(function (key) {
        conditionList.push(
          new chrome.declarativeContent.PageStateMatcher({
            pageUrl: { urlMatches:  key + '\\..*' }
          })
        )
      })
    }
  };

  request.send();

  return conditionList;
}

chrome.runtime.onInstalled.addListener(function(details) {
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    chrome.declarativeContent.onPageChanged.addRules([
      {
        conditions: conditions(),
        actions: [ new chrome.declarativeContent.ShowPageAction()]
      }
    ]);
  });
});

Вот ссылка на код Github: https://github.com/vaibhavmule/ycinfo/blob/master/background.js

1 Ответ

0 голосов
/ 25 октября 2018

Вам нужно подождать, пока все загрузки YC будут выбраны, а затем вызвать функцию addRules.Подход, который я здесь использовал, заключается в том, чтобы использовать обещания, делать это так.

function conditions() {
  return fetch(`https://raw.githubusercontent.com/vaibhavmule/ycinfo/master/ycstartup.json`)
    .then(function(res) {
    if (res.status === 200) {
      return res.json();
    }
    })
    .then(function(ycStartups) {
    console.log(ycStartups);
    return Object.keys(ycStartups).map(function (key) {
      return new chrome.declarativeContent.PageStateMatcher({
        pageUrl: { urlMatches:  key + '\\..*a' }
      })
    });
    })
}

chrome.runtime.onInstalled.addListener(function(details) {
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    conditions().then(function(res) {
      chrome.declarativeContent.onPageChanged.addRules([
        {
          conditions: res,
          actions: [ new chrome.declarativeContent.ShowPageAction()]
        }
      ]);
    });

  });
});

вот мой PR: https://github.com/vaibhavmule/ycinfo/pull/3

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