繁体   English   中英

用window.setInterval进行回调

[英]Callback with window.setInterval

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

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)

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

var checkMeta = function(sendResponse){

试一试

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

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

chrome.runtime参考

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM