Chrome扩展程序仅运行一次

时间:2015-07-19 13:32:12

标签: javascript json google-chrome google-chrome-extension

我试图制作一个在我访问Facebook时激活的扩展程序。到目前为止这一切都很好,然后它开始无限期地运行我的代码。

我想要的是仅在我第一次访问Facebook时运行content.js脚本,然后再也不再运行它。

我目前的方法是这样,但它不起作用:

background.js

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
  if (request.storage) {
    if (typeof request.value != 'undefined') {
      localStorage[request.storage] = request.value;
    }
    sendResponse({storage: localStorage[request.storage]});
  } else {
    sendResponse({});
  }
});

content.js

var status;
chrome.extension.sendRequest({storage: 'status'}, function(response) {
  status = response.storage;
});

if(status != '1')
{
   chrome.extension.sendRequest({storage: 'status', value: '1'});
   //  do my stuff here but only 1 time
}

的manifest.json

   "content_scripts": [ {
      "js": [ "js/jquery.js", "content.js" ],
      "matches": [ "https://facebook.com/" ]
   } ],

基本上我的想法是在访问Facebook时运行content.js,然后在脚本完成后,我添加一个状态变量,然后下次检查状态是否为1,这意味着代码之前已经运行过。

我该如何做到这一点?

谢谢。

1 个答案:

答案 0 :(得分:1)

1)你正在制作the standard async JavaScript mistake

var status;
chrome.extension.sendRequest({storage: 'status'}, function(response) {
  status = response.storage; // <--+
});                          //    | This code didn't execute yet
                             //    |
if(status != '1') // --------------+
{
   chrome.extension.sendRequest({storage: 'status', value: '1'});
   //  do my stuff here but only 1 time
}

2)您使用的old and deprecatedMessaging非常chrome.storage API。需要extension.sendRequest / onRequest,替换为runtime.sendMessage / onMessage

3)最好不要在这里使用Messaging; {{3}}专门用于此目的。再一次,也许你正在使用一些非常古老的教程。