我有一个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
被锁定了。我必须对其进行更改,以使其变为异步并使用回调参数,但是我对此并不陌生,并且不知道如何使其工作。有人可以帮我吗?
EDIT:我要做的是处理网站上的输入。有一个Javascript文件,我希望输入由我的内容脚本处理。我将javascript文件重定向到硬盘驱动器上已修改的文件。我在JavaScript加载输入的地方更改了一行。当我提交文本时,Javascript文件将调用类似var message = generator.gettext(mytext.value);
的代码,上述代码已插入页面,并且必须将mytext发送到内容脚本,并且必须返回内容脚本的输出。
我想我理解您的要求,尽管还不太清楚。
您正在发布一条消息,并且想要将结果存储在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。
如果这不是您想要的,请发表评论以提供更多详细信息,我会尽力帮助您。