まだ解決できない問題があります。メニューとタブのあるポップアップページがあり、設定タブがあります。[設定]タブで、いくつかのアイテムをローカルストレージに保存します。そのうちの1つは、デスクトップ通知のnotification_timeです。
注:オプションページはありません!
私の拡張機能にはこのポップアップウィンドウと背景ページがあり、その機能はデスクトップ通知でユーザーに警告することです。5、10、30分、1.2時間ごとなどに通知を表示します。この時間は、ポップアップページのオプションメニューで選択できるはずです。問題は、5分が節約された場合、たとえば10分に更新した場合、background.htmlが自分自身を更新しないことです。コードを20回近く書き直しましたが、解決策が見つかりませんでした。ここにコードサンプルと、私の問題を明確にするためのプリントスクリーンがあります。
ポップアップ:
$("#save_settings").click(function(){
var bgp = chrome.extension.getBackgroundPage();
localStorage.setItem("notifynumber",$("#notifynumber").val());
if($("#notify").attr('checked')){
localStorage.setItem('chbox','true');
} else {
localStorage.setItem('chbox','false');
}
if($("#notif_time_select :selected").val()!="default"){
bgp.setTime(parseInt($("#notif_time_select :selected").val()));
}
if($("#org_select :selected").val()!="default"){
localStorage.setItem('org',$("#org_select :selected").val().replace(/%20/g," "));
}
});
注:save_settingsはボタンであり、タブにはチェックボックスがあります(チェックされている場合は通知が許可され、そうでない場合は無効になります)。2つのhtmlselectタグがあります。1つはデータを選択するためのもの(org =組織)、もう1つは時間を選択するためのものです。"#notif_time_select"
html selectタグで、5、10、30分などを選択します。
したがって、[保存]ボタンをクリックするたびに、チェックボックスの状態をlocalstorageに保存し、時間を節約するためにバックグラウンドページから1つの関数を呼び出します。:bgp.setTime(parseInt($("#notif_time_select :selected").val()));
背景ページ:
時間を節約するために、関数setTimeを使用します。
var time = 300000; // default
function setTime(time){
this.time=time;
console.log("time set to: "+this.time);
}
その後、setIntervalを使用して定期的に通知を表示します
setInterval(function(){
howmanyOnline("notify",function(data){
if(data>localStorage.getItem("notifynumber")){
if (!window.webkitNotifications) { // check browser support
alert('Sorry , your browser does not support desktop notifications.');
}
notifyUser(data); // create the notification
}
if(localStorage.getItem('tweet')=='true'){
if(data>localStorage.getItem("notifynumber")){
sendTweet(data,localStorage.getItem('org'),localStorage.getItem('ck'),localStorage.getItem('cs'),localStorage.getItem('at'),localStorage.getItem('ats'));
}
}
});
},time);
setInterval内のコードは正常に機能しますが、唯一の問題は、
},time);
うまく更新されていません。10分ごとに通知を表示するように設定を変更すると、5分のままになります。唯一の方法は、拡張機能全体を再起動することです。拡張機能全体を再起動せずにsetIntervalの頻度を更新するにはどうすればよいですか?ありがとうジム
notif_timeもlocalStorageに保存し、バックグラウンドでローカルストレージの変更をリッスンするリスナーを設定するとどうなりますか。特定のlocalStorageアイテムの変更をリッスンする方法はありますか?!