Javascript 带有window.setInterval的回调

Javascript 带有window.setInterval的回调,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我试图返回一个在google chrome扩展中的页面上找到的一些元数据。background.js向website.js页面请求数据。该请求是在页面更新内容时发出的,因此我必须在返回之前检查数据是否已被修改。这是我的密码: var checkMeta = function(){ var title = $(".playerBarSong").text(); var artist = $(".playerBarArtist").text(); var album = $(

我试图返回一个在google chrome扩展中的页面上找到的一些元数据。background.js向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?
        }
    }
);

任何使用普通JavaScript或jquery的解决方案都将不胜感激

似乎
checkMeta
函数不知道
sendResponse
。一种解决方案是使
sendResponse
全局化,如下所示:
window.sendResponse=sendResponse。另一种解决方案是将其作为参数传递给
checkMeta
函数,如下所示:

 intervalId = window.setInterval( function(){ checkMeta(sendResponse);},250)
var checkMeta = function(sendResponse){
并更改
checkMeta
定义如下:

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

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

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


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

函数的
sendResponse
在哪里?它是从addListener传递给我的。嗯,我现在得到一个奇怪的错误:无法发送响应:如果您想在侦听器返回后发送响应,chrome.runtime.onMessage侦听器必须返回true(消息由扩展名biiifagddababandafhpehfabhhpgn发送)。我可以在addListener中使用window.sendResponse,但在checkMeta中使用它会产生错误。@FranzPayer您没有尝试在
onMessage
处理程序中返回true吗?我尝试过,看起来返回了值,但错误仍然会触发。我要把这个标记为正确的。这个问题可能是另一个问题。@FranzPayer是的,在使用扩展时,它似乎有一些特定的问题。我在这里帮不了你,也许你应该在谷歌的开发者论坛上寻求帮助