[英]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 :)
});
响应时调用(最多一次)的函数。 参数应为任何JSON可指定对象。 如果在同一文档中有多个onMessage侦听器,则只能发送一个响应。 当事件侦听器返回时,该函数将变为无效, 除非您从事件侦听器返回true表示您希望异步发送响应 (这将使消息通道保持另一端打开,直到调用sendResponse为止)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.