Javascript 带有window.setInterval的回调
我试图返回一个在google chrome扩展中的页面上找到的一些元数据。background.js向website.js页面请求数据。该请求是在页面更新内容时发出的,因此我必须在返回之前检查数据是否已被修改。这是我的密码: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 = $(
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是的,在使用扩展时,它似乎有一些特定的问题。我在这里帮不了你,也许你应该在谷歌的开发者论坛上寻求帮助