我有一个Chrome扩展程序,我正在努力。我的background.js脚本做了一些事情并将一个字符串(backgroundResponse)返回给我的content_script.js。这样工作正常,如下所示:
网页(index.html):
jQuery("#clickmenow").on("click", function (event)
{
document.dispatchEvent(new CustomEvent('funcDoRequest', {
'detail': { task: 'dir' }
}));
// I want backgroundResponse here instead somehow..?
});
<a href="#" id="clickmenow">Click me now</a>
background.js
document.addEventListener("funcDoRequest", function (stuff)
{
chrome.runtime.sendMessage(stuff.detail, function (backgroundResponse)
{ alert('Returning data from background.js: ' + backgroundResponse); });
});
我的问题是我希望响应backgroundResponse在点击某种程度上同步返回到调用jQuery。因此,当有人点击#clickmenow时,它最终会运行我的background.js东西,并将值一直返回到onclick(或dispatchEvent),而不仅仅是content_script.js,这就是它现在正在做的事情。我怎样才能做到这一点?我无法弄清楚。
答案 0 :(得分:0)
我希望将响应backgroundResponse返回同步
这是不可能的 - 与后台页面的任何通信都将涉及异步消息。
基于事件的通信不能使用显式响应,但您也可以使用页面侦听的trigger another event。您可以包含某种内容脚本必须复制到响应的唯一ID,以区分事件。
最后,如果这是您在事先知道的域名上控制的网页,请考虑使用externally_connectable
并直接与后台页面对话。
答案 1 :(得分:-1)
内容脚本和后台页面都可以使用chrome.runtime.sendMessage api进行通信
//content script
jQuery("#clickmenow").on("click", function (event) {
chrome.runtime.sendMessage({'detail': { task: 'dir' }}, function (backgroundResponse) { alert('Returning data from background.js: ' +
// handle backgroundResponse
});
});
//background page
chrome.runtime.onMessage.addListener(function(detailFromContentScript, sender, sendResponse) {
// handle detailFromContentscript
var backgroundResponse = process(detailFromContentScript)
// then send back response to content script
sendResponse(backgroundResponse)
})