0

我有一个EventListener和一个函数generator.gettext。代码:

var generator = {
    gettext: function (mytext) {
        //I send a message which is intercepted by my content script. 
        //Later my content script will send a reply back which will be processed by 'receiver'
        window.postMessage({
            type: "MESSAGE",
            text: mytext
        }, "*");
        while (generatedtext == "") {
            //WAIT until generatedtext is set by 'receiver'
        }
        return generator.generatedtext;
    },

    generatedtext: ""
};

function receiver(event) {
    if (event.data.type && (event.data.type == "FROM_CONTENTSCRIPT")) {
        generator.generatedtext = event.data.text;
    }
}
window.addEventListener('message', receiver, false);

我希望它generator.gettext返回generator.generatedtext,但我不能让它等到receiver设置它。我的印象EventListener是在被调用时被锁定generator.gettext。我必须对其进行更改,使其变为异步并使用回调参数,但我是新手,不知道如何使其工作。有人可以帮助我吗?

编辑:我想做的是处理网站上的输入。有一个 Javascript 文件,我希望该输入由我的内容脚本处理。我将 javascript 文件重定向到硬盘驱动器上的修改文件。我更改了 javascript 加载输入的行。当我提交文本时,Javascript 文件调用类似于var message = generator.gettext(mytext.value);我上面的代码的东西被注入到页面中,并且必须将 mytext 发送到我的内容脚本,并且必须返回我的内容脚本的输出。

4

1 回答 1

0

我想我明白你在问什么,虽然不是很清楚。

您正在发布一条消息,并且希望将结果存储在 generator.generatedtext 上。你已经在这样做了。

var generator = {
    generatedtext:'',
    gettext: function (mytext) {
        window.postMessage({
            type: "MESSAGE",
            text: mytext
        }, "*");
    }
};

window.addEventListener('message', function(ev){
    if (event.data.type && (event.data.type == "FROM_CONTENTSCRIPT")) {
        generator.generatedtext = event.data.text;
    }
},false);

除非您正在尝试做其他一些用途但没有明确说明,否则这就是您所需要的。没有必要让 generator.gettext() 返回任何东西,因为消息事件侦听器正在将接收到的消息分配给 generator.generatedtext。

如果这不是您想要的,请发表评论并提供更多详细信息,我会尽力帮助您。

于 2012-10-07T01:03:23.483 回答