2016-03-17 2 views
0

Я написал небольшое небольшое хромированное расширение, которое захватывает случайное изображение с Wallpaper Abyss и устанавливает его на хром os обои. Здесь manifest.json:Chrome wallpaper API работает с некоторыми изображениями, а не с другими, без видимых причин.

{ 
    "manifest_version": 2, 

    "name": "Abyss Wallpapers for Chrome OS", 
    "description": "Sets the Chrome OS wallpaper to a random wallpaper from the 
         Wallpaper Abyss (wall.alphacoders.com), once a minute", 
    "version": "1.0", 
    "background": 
    { 
    "scripts":["jquery-2.2.1.min.js","background.js"] 
    }, 
    "permissions": [ 
    "wallpaper", 
    "https://wall.alphacoders.com/api2.0/", 
    "background" 
    ] 
} 

И background.js:

var baseUrl = "https://wall.alphacoders.com/api2.0/get.php?"; 
var apiKey = "..."; 
var params = "auth=" + apiKey + "&method=random"; 
var interval = 20000; 
var XHRinProgress = false; 
function doXHR() 
{ 
    console.log("Fired doXHR()..."); 
    if (XHRinProgress) 
    { 
    console.log("Another XHR is already in progress..."); 
    console.log("Exiting..."); 
    return; 
    } 
    XHRinProgress = true; 
    $.get(baseUrl + params, function(data, status) 
    { 
     console.log("Entering XHR callback..."); 
     if (status == "success") 
     { 
     console.log("XHR connected successfully..."); 
     if (data.success) 
     { 
      console.log("Got successful response from the server...") 
      var index = Math.floor(Math.random() * data.wallpapers.length); 
      console.log(index); 
      console.log("Now setting wallpaper...") 
      chrome.wallpaper.setWallpaper 
      (
      {url:data.wallpapers[1].url_image, 
      layout:"CENTER_CROPPED", 
      filename:data.wallpapers[index].id + "." + data.wallpapers[index].file_type}, 
      function() 
      { 
       console.log("Enjoy your new wallpaper!") 
       XHRinProgress = false; 
      } 
     ) 
     } 
     else 
     { 
      console.log("Server returned error..."); 
      console.log(data.error); 
     } 
     } 
     else 
     { 
     console.log("Error in XHR..."); 
     } 
    }, "json"); 
} 
console.log("Let's do this..."); 
console.log("Setting function doXHR to run every " + interval + " milliseconds..."); 
setInterval(doXHR, interval); 

Это работает отлично. Но если я изменю запрос, скажем, method=category&id=3 (api spec по предоставленной ссылке), ошибок нет, обратные вызовы и все console.log проходят очень хорошо, но обои не меняются. Я понятия не имею, в чем проблема, поскольку ничего не кажется «неправильным» или даже что-то другое произошло с кодом, но ожидаемый результат меняет.

EDIT: изменил код, чтобы отразить ответ Tibrogargan, а оператор console.log(index) печатает различное количество раз каждый раз, но та же проблема сохраняется.

ответ

0

Вы всегда получаете тот же элемент в возвращаемом списке (url:data.wallpapers[>>> 1 <<<].url_image). Когда вы используете случайное, это изображение будет почти всегда отличаться. Когда вы используете категорию (например), это изображение почти всегда будет одним и тем же изображением каждый раз.

Единственный раз, когда это будет работать так, как вы хотите, - если вы используете «случайный» метод в вызове API альфа-кода. Вам нужно будет реализовать что-то, чтобы случайно выбрать изображение из возвращенного списка, если вы хотите, чтобы такое же поведение было вызвано неслучайным методом.

Заменить индекс с переменной:

var index = Math.floor(Math.random() * data.wallpapers.length); 
... 
url:data.wallpapers[index].url_image 
... 
filename:data.wallpapers[index].id... 

или даже лучше:

var wallpaper = data.wallpapers[Math.floor(Math.random() * data.wallpapers.length)]; 
... 
url:wallpaper.url_image, 
... 

 Смежные вопросы

  • Нет связанных вопросов^_^