我有一个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
设置它。我的印象是在调用generator.gettext
时EventListener被锁定。我必须改变它,因此它变为异步并使用回调参数,但我是新手,并且不知道如何使它工作。有人可以帮帮我吗?
编辑:我想要做的是处理网站上的输入。有一个javascript文件,我希望我的内容脚本处理该输入。我将javascript文件重定向到我硬盘上的修改过的文件。我更改了javascript加载输入的行。当我提交文本时,javascript文件会调用类似var message = generator.gettext(mytext.value);
的内容,上面的代码会被注入到页面中,并且必须将mytext发送到我的内容脚本,并且必须返回内容脚本的输出。
答案 0 :(得分: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。
如果这不是你想要的,请发表评论并提供更多详情,我会尽力帮助你。