dart: как получить правильную (набранную) ссылку на объект документа в iframe

У меня есть вариант использования, когда сложную иерархию пользовательского интерфейса необходимо отображать в iframe, но логика, обрабатывающая ее (создание, ввод документа, обработка событий, выходной документ), должна находиться в основном фрейме/приложении.

У меня возникают проблемы с получением типизированной ссылки на экземпляр документа iframe. Это вообще возможно? Ошибки кода даже с приведением типов.

Любой совет будет полезен, кроме того, который использует взаимодействие js - что-то столь же простое, как извлечение ветки пользовательского интерфейса и установка ее внутри iframe, не должно требовать этого ИМХО.

Кроме того, если это невозможно, где я должен заполнить ошибку?


person Peter StJ    schedule 09.03.2015    source источник
comment
Есть несколько связанных ошибок. Вы не предоставили ни кода, показывающего, что вы на самом деле пытались, ни сообщения об ошибке, поэтому трудно сказать, что именно применимо. Основная причина в том, что команда Dart пыталась защитить доступ через окно, и теперь это состояние, в котором его просто нельзя использовать. См. dartbug.com/20944, dartbug.com/20146, dartbug.com/20173, dartbug.com/20174, dartbug.com/16814, (закрыто, просто для справки dartbug.com/2312, < href="http://dartbug.com/1928" rel="nofollow noreferrer">dartbug.com/1928) и еще несколько (найдите _DOMWindowCrossFrame)   -  person Günter Zöchbauer    schedule 09.03.2015
comment
Я просто пытаюсь получить ссылку на html.Document в iframe и хотел бы использовать его как html.document.   -  person Peter StJ    schedule 09.03.2015


Ответы (2)


Доступ через окно очень ограничен из соображений безопасности. Есть открытые проблемы, чтобы разрешить его снова, потому что его все равно можно обойти с помощью dart-js-interop.

Таким образом, предлагаемое решение состоит в том, чтобы использовать dart:js в качестве обходного пути, пока проблемы не будут устранены.

  var ifrm = new js.JsObject.fromBrowserObject(dom.querySelector('#ifrm'));
  print(ifrm['contentWindow']);
  print(ifrm['contentDocument']);
person Günter Zöchbauer    schedule 09.03.2015
comment
В настоящее время я пытаюсь использовать dart:js, и он все еще не работает (js.context['window']['frameid'] также не разрешен... как мне это сделать? - person Peter StJ; 09.03.2015
comment
А как насчет js.context('window'].['frames'][0])? - person Günter Zöchbauer; 09.03.2015
comment
Я не понимаю, это вообще не похоже на действительное выражение дротика, также кажется, что Dart выясняет, что результатом content[frames][index] является IframeElement и не разрешает доступ с помощью []: класс 'IFrameElement' имеет нет метода экземпляра '[]'. - person Peter StJ; 09.03.2015
comment
Спасибо, так как бы я использовал этот «HTMLDocument» как html.Document dart? В настоящее время он все еще думает, что это JsObject? - person Peter StJ; 09.03.2015
comment
Я не думаю, что вы можете получить типизированный/Dart-объект из этого JsObject. Насколько я знаю, все, что вы можете сделать, это взаимодействовать с ним, используя dart-js-interop. - person Günter Zöchbauer; 09.03.2015

Попробуйте использовать window.postMessage() для передачи обновлений DOM между фреймами. Это может быть возможно, я думаю?

person Robert    schedule 09.03.2015
comment
Это вариант, но накладные расходы намного больше и не подходят для синхронизации с RAF. - person Peter StJ; 10.03.2015