Chrome扩展程序 - 将content_script.js中的数据传回网页?

时间:2016-05-13 08:57:14

标签: javascript google-chrome-extension

我有一个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,这就是它现在正在做的事情。我怎样才能做到这一点?我无法弄清楚。

2 个答案:

答案 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)
})