我想在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,这可能就此而言。
答案 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 + '"');
}
});