Dart Language: печать отчетов
Я хотел бы знать, как печатать отчеты на Dart.
По сути, это поток действий:
- Пользователь нажимает кнопку "Сообщить".
- Новое окно браузера создано.
- Связанные данные размещаются в новом окне.
Конечно, если для этого есть какой-либо API, я бы его использовал.
До сих пор я пытался создать новое окно, добавить в него прослушиватель onMessage и вызвать postMessage в главном классе для отправки данных. Однако это не сработало. Сообщение никогда не попадает на другую сторону (главное> новое окно браузера).
Main Dart Class
var reportWindow;
void createReportWindow() {
reportWindow = window.open("report.html", "");
}
void sendMessage(String message) {
reportWindow.postMessage(message, "*");
}
Report Dart Class (связан с report.html)
void startListening() {
window.onMessage.listen((e) {
print(e.data.toString());
});
}
1 ответ
Обновить
Начать отправку из окна отчета на 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>
элемент (не работает также между прочим). Но я предполагаю, что вам просто нужно открыть окно, и закомментированный код должен делать то же самое.