使用window.setInterval回调

时间:2013-06-18 06:15:50

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

我正在尝试在google-chrome扩展程序中返回页面上找到的一些元数据。 background.js向metedata的website.js页面发出请求。当页面正在更新内容时,请求是正确的,因此我必须检查以确保在返回之前数据已被修改。这是我的代码:

var checkMeta = function(){
    var title = $(".playerBarSong").text();
    var artist = $(".playerBarArtist").text();
    var album = $(".playerBarAlbum").text();
    var art = $(".playerBarArt").attr("src");
    if (previousTitle != title || previousArtist != artist || previousAlbum != album || previousArt != art){
        previousTitle = title;
        previousArtist = artist;
        previousAlbum = album;
        previousArt = art;

        currentMeta.title = title;
        currentMeta.artist = artist;
        currentMeta.album = album;
        currentMeta.art = art;

        window.clearInterval(intervalId);
        sendResponse(currentMeta); //Does not return value to the extension
    }

};

chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse){
        if (request.request == "meta"){
            currentMeta = request.meta;

            intervalId = window.setInterval(checkMeta,250)
            //Some sort of callback?
        }
    }
);

任何使用vanilla JavaScript或jquery的解决方案都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

似乎checkMeta函数不了解sendResponse。一种解决方案是使sendResponse全局像这样:window.sendResponse = sendResponse;。另一个解决方案是将它作为参数传递给checkMeta函数:

 intervalId = window.setInterval( function(){ checkMeta(sendResponse);},250)

并更改checkMeta定义,如下所示:

var checkMeta = function(sendResponse){

试一试

答案 1 :(得分:0)

chrome.extension.onMessage.addListener(function (request, sender, sendResponse) {
//.....

return true;    // try it :)
});

chrome.runtime reference

有响应时调用(最多一次)的函数。参数应该是任何可以使用JSON的对象。如果同一文档中有多个onMessage侦听器,则只有一个可以发送响应。当事件侦听器返回时,此函数变为无效,除非您从事件侦听器返回true以指示您希望异步发送响应(这将使消息通道保持打开到另一端,直到调用sendResponse )。