【发布时间】:2016-03-04 04:45:20
【问题描述】:
我正在制作一个非常简单的 chrome 扩展程序来随机更改我的 chromebook 上的壁纸。但是我在加载 Javascript 控制台后遇到了一个奇怪的错误:
拒绝将字符串评估为 JavaScript,因为“unsafe-eval”不是以下内容安全策略指令中允许的脚本来源:“script-src 'self' blob: filesystem: chrome-extension-resource:”。 @background.js:27
这是我的 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":["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 = "c160c64ef4c79e61e325ddf944183dfe"
var params = "auth=" + apiKey + "&method=random"
var interval = 30000;
var xhr = new XMLHttpRequest();
xhr.open("GET", baseUrl + params, true);
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
var data = xhr.responseText;
if (data.success)
{
chrome.wallpaper.setWallpaper
(
{url:data.wallpapers[1].url_image,
layout:"CENTER_CROPPED",
filename:data.wallpapers[1].id + "." + data.wallpapers[1].file_type},
function(thumbnail)
{
thumbnail = null;
}
)
}
}
}
setInterval(xhr.send(), interval);
它似乎正在拒绝setInterval() 方法,但那里没有 eval 甚至没有字符串。
编辑:所以我更改了setInterval() 语句以反映Bergi 的答案,现在后台脚本运行了大约一分钟,这意味着设置了时间间隔,但之后我又遇到了另一个错误:
未捕获的 InvalidStateError:无法在“XMLHttpRequest”上执行“发送”:对象的状态必须是 OPENED。(匿名函数)@background.js:27
为什么我在第 5 行专门调用xhr.open() 时对象不打开?
【问题讨论】:
-
我不认为
setInterval是一个高阶函数。 -
是的,我一开始以为 Chrome 会在
onreadystatechange()中进行回调,但事实并非如此。
标签: javascript google-chrome-extension eval