我正在尝试创建一个从工作者返回数据的函数,但它似乎不起作用,我应该怎么做?
function getExample()
{
worker = tabs.activeTab.attach({contentScript:
"var testText = document.getElementsByClassName('exampleElement')[0].children[1].innerHTML;" +
"self.port.emit('test', testText);"
});
worker.port.on('test', function(test) {return testText;});
}
答案 0 :(得分:2)
port.on
API与DOM事件监听器的概念基本相同。您不能简单地从侦听器函数返回一些内容并期望它传播到外部函数。甚至不能保证您的侦听器功能将被同步调用。您当前的功能相当于:
function getExample() {
worker.port.on('test', function(testText) {return testText;});
return undefined;
}
您需要提供一个回调函数,并让您的代码假设事物是异步的:
function getExample(callback) {
/* ... */
worker.port.on('test', function(testText) { callback(testText); });
// or shorter:
worker.port.on('test', callback);
}
PS:我刚注意到你的on
函数有一个名为test
的参数,但函数体使用了未定义的testText
。这也是一个问题,但是一个不相关的问题,可能只会在您简化实际代码以适应这里的问题时才会引入。