Vaadin的JavaScriptFunction无法从外部发布消息中接收参数

时间:2018-12-13 10:58:01

标签: javascript vaadin

我有一个Vaadin应用程序作为iframe嵌入在2+角度应用程序中,我正在尝试向帖子发送消息:

角侧:

<iframe id="iframe1" [src]="iframeSource"></iframe>

public sendMessage() {
    const iframe: HTMLIFrameElement = document.getElementById('iframe1') as HTMLIFrameElement;
    iframe.contentWindow.postMessage('asdf', '*');
}

Vaadin方面:

JavaScript.getCurrent().addFunction("listen", new JavaScriptFunction() {
                @Override
                public void call(JsonArray arguments) {
                    Notification.show("Received call ");
                }
            });
JavaScript.getCurrent().execute("window.addEventListener('message', listen, false);");

Vaadin应用程序接收到消息,但是它在“参数”中获得的唯一参数是{isTrusted:true},而不是“ asdf”。我已经尝试过传递数组,json,字符串化的json,而且总是这样。

问题是,如果在Vaadin中使用普通的javascript函数而不是“ JavaScriptFunction”,那么我可以正确读取参数。效果很好:

String string = "listen = function myFunction(p) {"
                    +"console.log('function called', p); alert(p);"
                +"}";

JavaScript.getCurrent().execute(string);
JavaScript.getCurrent().execute("window.addEventListener('message', listen, false);");

我不知道该怎么办,或者我做错了什么,才有这种行为,我一直无法找到解决方案或解决方法。救命!

编辑:正如我发布的那样,我想到了一种可能的解决方法,并且它实际上有效:如果我从普通函数中调用JavascriptFunction,则可以传递参数。像这样,“ JsonArray”参数将包含实际参数:

JavaScript.getCurrent().addFunction("javaFunction", new JavaScriptFunction() {
    @Override
    public void call(JsonArray arguments) {
        Notification.show("Received call ");
    }
});

String listenFunction = "listen = function myFunction(p) {"
        +"console.log('myFunction', p); javaFunction(p.data);"
    +"}";
JavaScript.getCurrent().execute(listenFunction);
JavaScript.getCurrent().execute("window.addEventListener('message', listen, false);");

我离开这个问题是因为我认为这可能对其他人有用,我认为这不是必需的。

0 个答案:

没有答案