我正在特定网站上构建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
答案 0 :(得分:1)
您需要等到所有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()]
}
]);
});
});
});