我已经将我的网站设置为chrome扩展。目前,当我点击扩展图标时,它会导航到网站的登录页面。它访问服务器文件并根据服务器文件的输出设置图标的颜色。现在我需要的是,当点击扩展图标时执行所有这些操作。我希望在chrome中安装扩展时执行这些操作。应该定期检查服务器文件是否有输出,就在安装扩展时。 这是我的background.js
function getGmailUrl() {
return "http://calpinemate.com/";
}
function isGmailUrl(url) {
return url.indexOf(getGmailUrl()) == 0;
}
chrome.browserAction.onClicked.addListener(goToPage);
function goToPage() {
chrome.tabs.query({
url: "http://calpinemate.com/*",
currentWindow: true
}, function(tabs) {
if (tabs.length > 0) {
var tab = tabs[0];
console.log("Found (at least one) Gmail tab: " + tab.url);
console.log("Focusing and refreshing count...");
chrome.tabs.update(tab.id, { active: true });
updateIcon();
} else {
console.log("Could not find Gmail tab. Creating one...");
chrome.tabs.create({ url: getGmailUrl() });
updateIcon();
}
});
}
function updateIcon() {
var req = new XMLHttpRequest();
req.addEventListener("readystatechange", function() {
if (req.readyState == 4) {
if (req.status == 200) {
localStorage.item = req.responseText;
if (localStorage.item == 1) {
chrome.browserAction.setIcon({
path: "calpine_logged_in.png"
});
chrome.browserAction.setBadgeBackgroundColor({
color: [190, 190, 190, 230]
});
chrome.browserAction.setBadgeText({
text: ""
});
} else {
chrome.browserAction.setIcon({
path: "calpine_not_logged_in.png"
});
chrome.browserAction.setBadgeBackgroundColor({
color: [190, 190, 190, 230]
});
chrome.browserAction.setBadgeText({
text:""
});
}
} else {
// Handle the error
alert("ERROR: status code " + req.status);
}
}
});
req.open("GET", "http://blog.calpinetech.com/test/index.php", true);
req.send(null);
}
if (chrome.runtime && chrome.runtime.onStartup) {
chrome.runtime.onStartup.addListener(function() {
updateIcon();
});
} else {
chrome.windows.onCreated.addListener(function() {
updateIcon();
});
}
仍然会对onClicked
事件执行所有操作。如何让它在启动事件中执行?
答案 0 :(得分:3)
如果您要执行定期检查,可以使用 chrome.alarms API (与window.setInterval
相比,也可以使用非持久性背景页面) 。
E.g:
manifest.json
:
"permissions": [
"alarms",
...
background.js
:
...
var checkInterval = 5;
chrome.alarms.create("checkServer", {
delayInMinutes: checkInterval,
periodInMinutes: checkInterval
});
chrome.alarms.onAlarm.addListener(function(alarm) {
if (alarm.name === "checkServer") {
updateIcon();
}
});