我想知道如何在Dart上打印报告。
基本上,这是活动流程:
- 用户点击"报告"按钮。
- 将创建新的浏览器窗口。
- 相关数据将放置在新窗口中。
当然,如果有任何 API 可以做到这一点,我会使用它。
到目前为止,我已经尝试创建一个新窗口,在其上添加onMessage侦听器,并在主类上调用postMessage来发送数据。但是,它没有奏效。消息永远不会到达另一端(主>新的浏览器窗口)。
主飞镖类
var reportWindow;
void createReportWindow() {
reportWindow = window.open("report.html", "");
}
void sendMessage(String message) {
reportWindow.postMessage(message, "*");
}
报告飞镖类(链接到报告.html)
void startListening() {
window.onMessage.listen((e) {
print(e.data.toString());
});
}
更新
从报告窗口开始发送到window.opener.postMessage(...)
,然后响应(message.source as WindowBase).postMessage(...)
。这可能是返回值为 window.open
的错误(有关详细信息,请参阅 http://dartbug.com/20216)。
源语言
此单元测试中的代码应向您展示如何 https://github.com/dart-lang/core-elements/blob/master/test/core_media_query_test.dart 完成它。
我从一个新的URL打开一个窗口,从服务器加载其内容和一个Dart脚本(当然也可以编译为JavaScript)。打开的窗口通过sendMessage
与主窗口通信。这在两个方向上都有效。
基本上,第二个窗口是第二个Dart浏览器应用程序。
这可能不完全是您想要的,但我想您的要求可以通过这种方式实现。
在此行 https://github.com/dart-lang/core-elements/blob/master/test/core_media_query_test.dart#L66 注释掉的代码可能适合您的要求。我在下面创建了解决方法,因为代码应该从主窗口中的代码调整第二个窗口的大小以测试 <core-media-query>
元素(顺便说一句,也不起作用)。但是我假设您只需要打开窗口,注释掉的代码应该可以正常工作。