2014-07-12 132 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

非常感謝!這工作:) –

相關問題