2014-07-12 235 views
1

我正在尝试开发类似Google Chrome的约会提醒扩展程序。 扩展名由一个浏览器动作组成,当点击该动作时,它会显示一个HTML页面,用户在其中输入约会的详细信息。 在约会开始时,警报应显示约会的名称。Chrome扩展脚本仅在弹出窗口显示时运行

只有当浏览器操作处于活动状态时,此扩展才能正常工作。如果浏览器操作被关闭,则警报不会在指定时间弹出。我不明白是什么导致了这个问题。

manifest.json的

{ 
    "manifest_version": 2, 
    "name": "Appointment", 
    "description": "", 
    "version": "1.0", 
    "background": { 
     "scripts": [ 
      "js/jquery.js", 
      "js/Utils.js", 
      "js/Controller.js" 
     ] 
    }, 
    "permissions": [ 
     "storage", 
     "alarms", 
    ], 
    "browser_action": { 
     "default_icon": "icon-appointment.png", 
     "default_popup": "popup.html" 
    } 
} 

Controller.js

function loadAppointments(allAppointmentsLoadedCallback){ 


    chrome.storage.sync.get("test_appointments",function(items){ 
     allAppointments = []; 
     if("test_appointments" in items){ 
      sAllAppointments = items["test_appointments"]; 
      allAppointments = JSON.parse(sAllAppointments); 
     } 

     allAppointmentsLoadedCallback(allAppointments); 
    }); 
} 



function getAppointmentScheduledAt(aUnixTime,appointmentFoundCallback){ 
    console.log('Finding Appointment for ',new Date(aUnixTime)); 
    loadAppointments(function(allAppointments){ 
     for(var i=0;i<allAppointments.length;i++){ 
      var anAppointment = allAppointments[i]; 
      var startTime = new Date(anAppointment.startTime).getTime(); 
      console.log('Start time is ',startTime,' and alarm time is',aUnixTime); 
      if(startTime == aUnixTime){ 
       appointmentFoundCallback(anAppointment); 
       return; 
      } 
     } 
     appointmentFoundCallback(null); 
    }); 
} 

chrome.alarms.onAlarm.addListener(function(anAlarm){ 

    getAppointmentScheduledAt(anAlarm.scheduledTime,function(appointment){ 
     if(appointment){ 
      console.log('Found one'); 
      alert(appointment.title); 
     }else{ 
      console.log('No appointment found.'); 
     } 
    }); 
}); 
+0

你能发布整个代码? – FuzzyAmi

+0

我不想;但我认为有关部分在那里 –

回答

3

我假设你正在呼吁,在弹出的页面chrome.alarms.create。这会将警报注册到弹出框的defaultViewwindow)。弹出关闭时会被销毁。

您需要注册报警的背景页的观点:

chrome.runtime.getBackgroundPage(function(bg) { 
    bg.chrome.alarms.create(...); 
}); 
+0

非常感谢!这工作:) –

相关问题