首页 > 解决方案 > onPageChanged 条件未加载

问题描述

我正在特定网站上构建一个 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

标签: javascriptgoogle-chrome-extension

解决方案


您需要等到所有 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()]
        }
      ]);
    });

  });
});

这是我的公关:https ://github.com/vaibhavmule/ycinfo/pull/3


推荐阅读