镀铬扩展计时器

时间:2012-12-29 14:39:27

标签: google-chrome-extension

  

可能重复:
  Chrome extension delay condition

我是扩展程序的初学者,从这里和那里收集代码我创建了一个简单的收集选项卡的URL(适用于特定网站)并使用ajax我将它发送到我的服务器,以便将其存储在我的数据库中。 我想要做的是添加一个计时器,这样如果前一次点击发生的时间不到5秒,浏览器按钮将被禁用(或什么都不做)。

以下是扩展的结构:

清单:

{
"name": "The name",
"icons": { "16": "Big.png",
       "48": "Big.png",
       "128": "Big.png" },
"version": "1.0",
"manifest_version": 2,
"description": "and the description",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": ["tabs", "<all_urls>"]
}

popup.js:

chrome.tabs.getSelected(null,function(tab) {
var Mp=tab.url
if(Mp=='http://www.examplesite.com')
{
var xhr=new XMLHttpRequest();
var Params;
xhr.open("POST", "http://myserver.com/post_from_extension.asp", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
Params='Url=' + tab.url;
xhr.onreadystatechange=function()
    {
        if(xhr.readyState==4)
        {
        message.innerHTML=xhr.responseText;
        }
    }
xhr.send(Params);
}
else
{
message.innerHTML='<span style="font-family: Segoe UI, Tahoma;color: #f00">This is not a valid url</span>';
}
});

popup.html

<!DOCTYPE html>
<html style=''>
<head>
<script src='popup.js'></script>
</head>
<body style="width:400px;">
<div id='message'><span style="font-family: Segoe UI, Tahoma;color: #00f">Sending request</span></div>
</body>
</html>

作为一个附带问题,是否还有其他方法可以在我的数据库中发布网址,如果没有使用Ajax的话?

感谢您阅读我。

1 个答案:

答案 0 :(得分:1)

我认为你应该在扩展中添加一个后台页面(脚本) - 这是一种应用程序状态。在清单中添加:

"background": {
    "scripts": ["background.js"]
  },

然后,在页面中,您可以定义一个存储最后一次的数组,以便为​​每个选项卡执行浏览器操作。

var timers = [];

您可以从popup.js更新此数组的元素,例如(getSelected回调中):

chrome.extension.getBackgroundPage().timers[tabId] = new Date();
chrome.browserAction.disable(tabId);
chrome.browserAction.setIcon({path: "icon-disabled.png", tabId: tabId});

请注意如何禁用浏览器操作并将其外观更改为禁用/灰显。

自注册时间超过5秒后经过一段时间后,您应该从后台页面重新启用该按钮。

var currentTime = new Date();
if(currentTime - chrome.extension.getBackgroundPage().timers[tabId] > 5000)
{
  chrome.browserAction.enable(tabId);
  chrome.browserAction.setIcon({path: "icon-enabled.png", tabId: tabId});
}

您可以通过setInterval回调执行此代码,并在timers数组中的所有元素的循环内执行。