在chrome.tabs.executeScript中调用函数

时间:2013-11-30 10:37:57

标签: javascript google-chrome google-chrome-extension

我想在chrome.tabs.executeScript中调用一个函数,该函数返回一个字符串,我将在chrome.runtime.sendMessage()中发送它。

代码:

chrome.tabs.executeScript(tab.id, {code:var string1= ??? ;
chrome.runtime.sendMessage(string1);"});

我该怎么做我的函数包含返回字符串或字符串数​​组的Javascript代码。

一些帮助将不胜感激。

更新

function(array_of_Tabs) {
  var tab = array_of_Tabs[0];
  //tab.url; - url of the active tab

  chrome.tabs.executeScript(tab.id, {code: 'var test = document.body,text= test.textContent,bodyStart="<BODY",bodyEnd="</BODY>",regex=bodyStart+"(.*?)"+ bodyEnd,regexg = new RegExp(regex, "g"),match = regexg.exec(text);' + 'chrome.runtime.sendMessage(match);'});
});
chrome.runtime.onMessage.addListener(function(request) {
  document.getElementsByTagName('html')[0].innerHTML = request;
});

这应该按照你告诉我的方式工作,但不是。为什么呢?

是的BTW我没有在页面上解析纯HTML,这可能就此而言。

1 个答案:

答案 0 :(得分:4)

chrome.tabs.executeScript有一个第三个可选参数,可以访问注入代码的结果。 E.g。

/* In `background.js` */
...
var tab = ...
chrome.tabs.executeScript(tab.id, {
    code: 'var string1 = "Hello, World !"; return string1;'
}, function(resultArr) {
    processString1(resultArr[0]);
});

function processString1(str1) {
    alert('String1 = "' + str1 + '"');
}

如果这不能满足您的需求,您仍然希望使用消息传递:

/* In `background.js` */
...
var tab = ...
chrome.tabs.executeScript(tab.id, {
    code: 'var string1 = "Hello, World !"; ' +
          'chrome.runtime.sendMessage({ text: string1 });'
});

chrome.runtime.onMessage.addListener(function (msg) {
    if (msg.text !== undefined) {
        alert('String1 = "' + msg.text + '"');
    }
});