メタデータを抽出するChrome拡張機能に取り組んでいます。メタデータを解析するコードは、コンテンツスクリプトに含まれています。background.jsとcontent.jsは、sendMessageのリクエストとレスポンスを介して通信します。sendMessageリクエストの非同期性に関する問題が発生しており、それを修正する方法がわかりません(この問題に関する一連の議論を読んだ後でも)。任意のアドバイスや指示をいただければ幸いです。これらをコールバックに変換する方法がわからないのではないかと思います。
background.js:
function onContextClick(info, tab) {
if( info["selectionText"] ){
var x = getMeta(tab);
//do stuff with x
}
}
function getMeta (tab) {
chrome.tabs.sendMessage(tab.id, {fetchTag: "meta,name,author,content"}, function(response) {
//alert(response.data);
//one thing I tired was to put my "do stuff" embedded here, but that didn't work either
return response.data;
});
}
var menu_id = chrome.contextMenus.create({"title": "Get Meta", "contexts":["selection"], "onclick": onContextClick});
content.js:
function fetchTag(string) {
var param = string.split(",");
return $(param[0] + "["+param[1]+ "=\"" + param[2] + "\"]").attr(param[3]);
}
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.fetchTag.length > 0)
sendResponse({data: fetchTag(request.fetchTag)});
});