2014-07-25 5 views
-1

Google 크롬 Api 확장 프로그램을 사용하여 JSON에서 알림을 표시하는 다음 코드가 있습니다. 알림이 표시되면 클릭하면 여러 개의 탭 URL (오류)이 열렸습니다. 이 문제는 하나의 탭 URL 만 열어야하므로 해결해야합니다. 이것이 유일한 문제입니다.실시간으로 chrome.notification을 만들 수 있습니까?

var timeChange = 1000, jsons = ['JSON_URL']; 

updateValue = function() { 
    var colorStatus = 0; 

    chrome.storage.local.get(function (dataStorage) { 
      $.getJSON(jsons+'?'+$.now(), function (data) { 

      var jLastPost = {'LastNotification':''}, sizePost = (data.results.length - 1),  dataLastPost = data.results[0]; 
      totalEntradas = data.totalEntradas ? data.totalEntradas : ''; 

      $.each(data.results, function (k,v) { 
       if (($.inArray('post-'+v.id, dataStorage.IDs) !== -1) && (v.date_status > 0)) { 
       colorStatus = 1; 
       } 
      }); 

      chrome.browserAction.setBadgeText({'text': totalEntradas.toString()}); 

      if (dataStorage.LastNotification !== dataLastPost.id) 
      { 

       jLastPost.LastNotification = dataLastPost.id; 
       chrome.storage.local.set(jLastPost); 

       chrome.notifications.create(dataLastPost.id,{ 
        type: 'basic', 
        title: dataLastPost.titulo, 
        message: 'Now for you!', 
        iconUrl: dataLastPost.image 
       }, function (id) {}); 

       chrome.notifications.onClicked.addListener(function() { 
        chrome.tabs.create({url: dataLastPost.uri}); 
       }); 

       chrome.notifications.clear(dataLastPost.id, function() {}); 
       return false; 
      } 
     }); 
    }); 
setTimeout(updateValue, timeChange); 
} 

updateValue(); 

답변

0

당신이 updateValue을 실행할 때 매초 chrome.notifications.onClicked 수신기를 부착된다 : 아래의 코드를 찾습니다. 최소한 리스너를 메서드 밖으로 이동해야합니다.

이 줄에있는 것이 작동해야합니다.

var timeChange = 1000, jsons = ['JSON_URL']; 
var lastPostUri; 

chrome.notifications.onClicked.addListener(function() { 
    if (lastPostUri) { 
     chrome.tabs.create({url: lastPostUri}); 
    } 
}); 

updateValue = function() { 
    var colorStatus = 0; 

    chrome.storage.local.get(function (dataStorage) { 
      $.getJSON(jsons+'?'+$.now(), function (data) { 

      var jLastPost = {'LastNotification':''}, sizePost = (data.results.length - 1),  dataLastPost = data.results[0]; 
      totalEntradas = data.totalEntradas ? data.totalEntradas : ''; 

      $.each(data.results, function (k,v) { 
       if (($.inArray('post-'+v.id, dataStorage.IDs) !== -1) && (v.date_status > 0)) { 
       colorStatus = 1; 
       } 
      }); 

      chrome.browserAction.setBadgeText({'text': totalEntradas.toString()}); 

      if (dataStorage.LastNotification !== dataLastPost.id) 
      { 

       jLastPost.LastNotification = dataLastPost.id; 
       chrome.storage.local.set(jLastPost); 
       lastPostUri = dataLastPost.uri 

       chrome.notifications.create(dataLastPost.id,{ 
        type: 'basic', 
        title: dataLastPost.titulo, 
        message: 'Now for you!', 
        iconUrl: dataLastPost.image 
       }, function (id) {}); 

       chrome.notifications.clear(dataLastPost.id, function() {}); 
       return false; 
      } 
     }); 
    }); 
setTimeout(updateValue, timeChange); 
} 

updateValue(); 
+0

많은 감사합니다. 아브라함,이게 내 문제, 좋은 관찰을 해결했습니다. –

관련 문제