如何使一个函数在EventListener设置变量后返回一个值?

问题描述 投票:0回答:1

我有一个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设置它。我的印象是,在调用EventListenergenerator.gettext被锁定了。我必须对其进行更改,以使其变为异步并使用回调参数,但是我对此并不陌生,并且不知道如何使其工作。有人可以帮我吗?

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

javascript asynchronous callback dom-events
1个回答
0
投票

我想我理解您的要求,尽管还不太清楚。

您正在发布一条消息,并且想要将结果存储在generator.generationtext上。您已经在这样做。

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.generationtext。

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

© www.soinside.com 2019 - 2024. All rights reserved.