我的Chrome扩展程序的许多用户都报告了此错误。问题是我无法解决它。其中一个原因是它在我的电脑上工作正常。
这是产生问题的页面。
// napravi glavni objekat - main
let main = {};
// napravi prazan niz u koji treba uneti valute
let coins = [];
chrome.storage.local.get('main', e => {
if(e.main){
main = e.main
if(main.timestamp){
let time_difference = Math.floor((new Date().getTime() - main.timestamp) / 1000);
if(time_difference > 150){
// pokreni glavnu funkciju prvi put
check_convert_and_get_json();
}
}
}
else{
// pokreni glavnu funkciju
check_convert_and_get_json();
}
});
// glavna petlja koja se poziva u odredjenom vremenskom intervalu
setInterval(() => {
chrome.storage.local.get('main', e => {
if(e.main) main = e.main;
let time_difference = Math.floor((new Date().getTime() - main.timestamp) / 1000);
if(time_difference >= 301){
// pokreni glavnu funkciju
check_convert_and_get_json();
}
});
}, 15000);
function check_convert_and_get_json(){
// dohvati objekat convert
chrome.storage.local.get('convert', (e) => {
// ukoliko objekat konvert postoji, unesi ga u objekat main
main['convert'] = e.convert ? e.convert : false;
// u zvisnosti da li je korisnik podesio objekat convert, odredi URL za kripto-valute
let coins_url = e.convert ? "https://api.coinmarketcap.com/v1/ticker/" + "?convert=" + e.convert + '&limit=0' : 'https://api.coinmarketcap.com/v1/ticker/?limit=0';
// u zvisnosti da li je korisnik podesio objekat convert, odredi URL za celokupno trziste
let market_url = e.convert ? "https://api.coinmarketcap.com/v1/global/" + "?convert=" + e.convert : 'https://api.coinmarketcap.com/v1/global/';
// dohvati JSON
get(coins_url, market_url);
});
}
function get(coins_url, market_url){
grab_data(coins_url)
.then(data => {
coins = [];
// na osnovu dobijenog JSON objekta, izvuci potrebne podatke o valutama
create_coins_object_inside_main_object(data);
})
.then(() => {
// podesi trenutno vreme kako bi znali kada su rezultati poslednji put osvezeni
let timestamp = new Date();
// unesi timestam u objekat main
main['timestamp'] = timestamp.getTime();
grab_data(market_url)
.then((data) => {
// na osnovu dobijenog JSON objekta, izvuci potrebne podatke o trzistu
create_market_cap_object_inside_main_object(data);
})
.then(() => {
// sacuvaj objekat main
chrome.storage.local.set({main}, function(){});
})
.catch(() => {
// sacuvaj objekat main
chrome.storage.local.set({main}, function(){});
});
});
}
function create_market_cap_object_inside_main_object(data){
let market = JSON.parse(data);
main['market_cap'] = {'total_market_cap_usd': market.total_market_cap_usd};
if(main.convert) main['market_cap']['total_market_cap_' + main.convert.toLowerCase()] = market['total_market_cap_' + main.convert.toLowerCase()];
}
function create_coins_object_inside_main_object(data){
JSON.parse(data)
.filter(coin => {
// prihvati samo one valute koje zadovoljavaju odredjene uslove
return coin.id && coin.name && coin.symbol && coin.price_usd && coin.price_btc && coin.percent_change_24h;
})
.forEach(coin => {
if(main.alerts){
if(main.alerts[coin.name.toLowerCase()]){
if(main.alerts[coin.name.toLowerCase()].max < coin['price_' + main.alerts[coin.name.toLowerCase()].cur]){
chrome.notifications.create({
type: 'basic',
title: 'Green Alert',
message: 'Price of ' + coin.name + ' is above selected value.',
iconUrl: 'alert_up.png',
priority: 2,
requireInteraction: true
})
}
if(main.alerts[coin.name.toLowerCase()].min > coin['price_' + main.alerts[coin.name.toLowerCase()].cur]){
chrome.notifications.create({
type: 'basic',
title: 'Red Alert',
message: 'Price of ' + coin.name + ' is below selected value.',
iconUrl: 'alert_down.png',
priority: 2,
requireInteraction: true
})
}
}
}
// na osnovu odredjenih parametara popuni coins niz
populate_empty_object_and_push_it_to_coins_array(coin);
});
main['coins'] = coins;
}
function NotificationOptions(type, iconURL, title, message){
this.type = type;
this.iconURL = iconURL;
this.title = title;
this.message = message;
}
function populate_empty_object_and_push_it_to_coins_array(coin){
// kreiraj prazan objekat koji zatim treba dodati na coins niz
let empty = {};
empty['id'] = coin.id;
empty['name'] = coin.name;
empty['symbol'] = coin.symbol;
empty['price_usd'] = coin.price_usd;
// proveri da li postoji konverzija u drugu valutu i obavi odgovarajucu radnju
if(main.convert) empty['price_' + main.convert.toLowerCase()] = coin['price_' + main.convert.toLowerCase()];
empty['price_btc'] = coin.price_btc;
empty['percent_change_24h'] = coin.percent_change_24h;
coins.push(empty);
}
function grab_data(url){
return new Promise(function(resolve, reject) {
var http = new XMLHttpRequest();
http.onload = () => {
if(http.readyState == 4 && http.status == 200){
resolve(http.response);
}
else{
reject(http.status);
}
}
http.onerror = () => {
reject(http.status);
}
http.open('get', url);
http.send();
});
}
我正在努力解决这个问题,但我不知道为什么现在发生这种情况,而不是在一两个月之前......
基本上,我需要获取JSON文件并从中提取一些信息。它在第一个请求中显示错误https://api.coinmarketcap.com/v1/ticker/?limit=0