我正在尝试在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的解决方案都将受到赞赏。
答案 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 :)
});
有响应时调用(最多一次)的函数。参数应该是任何可以使用JSON的对象。如果同一文档中有多个onMessage侦听器,则只有一个可以发送响应。当事件侦听器返回时,此函数变为无效,除非您从事件侦听器返回true以指示您希望异步发送响应(这将使消息通道保持打开到另一端,直到调用sendResponse )。