使用内容脚本从get函数返回值

时间:2013-09-26 07:51:00

标签: javascript firefox firefox-addon firefox-addon-sdk

我正在尝试创建一个从工作者返回数据的函数,但它似乎不起作用,我应该怎么做?

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;});
}

1 个答案:

答案 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。这也是一个问题,但是一个不相关的问题,可能只会在您简化实际代码以适应这里的问题时才会引入。