0

我正在尝试返回在 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 中的任何解决方案将不胜感激。

4

2 回答 2

1

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

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

并像这样更改checkMeta定义:

var checkMeta = function(sendResponse){

试一试

于 2013-06-18T06:27:12.707 回答
0
chrome.extension.onMessage.addListener(function (request, sender, sendResponse) {
//.....

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

chrome.runtime 参考

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

于 2014-02-10T10:24:11.143 回答