Dart Language: как преобразовать строку в передаваемый (ByteBuffer)

Я буду использовать window.postMessage("", "*", [transferableData]) для отправки данных между двумя окнами браузера. Однако я не нашел прямого ответа на вопрос о том, как преобразовать типы в переводимые.

Итак, для того, чтобы я начал изучать это, было бы здорово узнать, как преобразовать простую строку в переносимый (ByteBuffer) и прочитать ее на другой стороне (стороне, которая получает сообщение с данными). Это поможет мне решить мою проблему и узнать об этой концепции.

ВАЖНОЕ ОБНОВЛЕНИЕ:

Этот вопрос привел меня сюда: Дарт Язык: печать отчетов

Переносимые объекты еще не реализованы на Dart VM ( http://dartbug.com/4149). Это означает, что если вы запускаете ваше приложение через Dartium (Dart VM), другое окно будет получать и обрабатывать первый аргумент postMessage, а не Transferable Object. Однако JavaScript выполняет свою работу: объект переносится, а исходный массив очищается.

1 ответ

Решение
import 'dart:convert';

var list = Utf8.encode('xxx');
var data = list is Uint8List ? list.buffer : new Uint8List.fromList(list).buffer;

отправить данные, используя window.PostMessage использование

window.postMessage({'data': data}, '*', [data]);

и читать его на стороне получателя, как

var string = Utf8.decode(message.data['data']);

См. Также http://dartbug.com/19968 для получения статуса переводных.
Насколько мне известно, недавний релиз канала Dart Dev уже поставляется с Dartium 38.xxx.
Вот небольшой тестовый пример для переводчиков https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/tests/html/transferables_test.dart

Другие вопросы по тегам