【问题标题】:Chrome wallpaper API works with some images, not with others, no apparent reasonChrome 壁纸 API 适用于某些图像,而不适用于其他图像,没有明显的原因
【发布时间】:2016-03-17 04:01:42
【问题描述】:

我编写了一个快速的小 chrome 扩展程序,它从Wallpaper Abyss 抓取随机图像并将其设置为 chrome 操作系统壁纸。这是 manifest.json:

{
  "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 规范),则不会出现错误,回调和所有 console.log 都可以正常通过,但墙纸不会改变。我不知道问题出在哪里,因为似乎没有什么“错误”,甚至代码发生了不同的事情,但预期的结果确实发生了变化

编辑:更改代码以反映 Tibrogargan 的答案,console.log(index) 语句每次打印不同的数字,但同样的问题仍然存在。

【问题讨论】:

    标签: javascript google-chrome javascript-debugger


    【解决方案1】:

    您总是得到返回列表的相同元素 (url:data.wallpapers[>>> 1 <<<].url_image)。当您使用随机时,该图像几乎总是不同的。当您使用类别(例如)时,该图像几乎总是每次都是相同的图像。

    如果您在 alphacoders 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,
    ...
    

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 2015-02-18
      相关资源
      最近更新 更多