jmix1.5 如果获取browerFrame的数据

>  <browserFrame id="declarativeBrowserFrame"
>                                           height="100%"
>                                           width="100%">
>                                 <!--                                <resource>-->
>                                 <!--                                    <url url="C:\Users\dragonpass\Desktop\新建文本文档.html"/>-->
>                                 <!--                                </resource>-->
>                                 <resource>
>                                     <!-- 使用 FileResource 加载本地文件 -->
>                                     <file path="C:/Users/dragonpass/Desktop/新建文本文档.html"/>
>                                 </resource>
>                             </browserFrame>

我想获取这个嵌入html中文本框的数据?引入html没有问题,获取数据要怎么处理?

  1. 首先,需要在 html 里将文本框的值通过 window.parent.postMessage 发给父页面–也就是 browerFrame所在的页面。比如,我贴的这个是让 DS 给我写的一个测试页面。每次 input 值就会给后台发。
    test.html (11.5 KB)

  2. 在browserFrame 加载

<browserFrame id="declarativeBrowserFrame"
              height="600px"
              width="800px">
    <resource>
        <file path="/Users/leo/Downloads/test.html"/>
    </resource>
</browserFrame>
  1. 在这个页面的 controller 中,添加下面的代码:
    @Subscribe
    public void onInit(final InitEvent event) {
        JavaScript.getCurrent().addFunction("onMessageFromIframe", arguments -> {
            // 这里处理获取的数据。
            log.info("onMessageFromIframe data={}",arguments.getString(0));
        });

// 注册监听处理收到的数据,调用上面添加的方法处理。
// 注意:我这里的 e.data.type 和 e.data.text 是上面那个 html 里发送的结构,需要根据你的修改。
        JavaScript.getCurrent().execute(
                "window.addEventListener('message', function(e) {" +
                        "    console.log('received',e);" +
                        "  if (e.data.type === 'text_update') {" +
                        "    console.log('calling');" +
                        "    onMessageFromIframe(e.data.text);" +
                        "  }" +
                        "});"
        );
    }