【问题标题】:dart: how to get correct (typed) reference to document object in iframedart:如何在 iframe 中获取对文档对象的正确(键入)引用
【发布时间】:2015-03-09 11:14:17
【问题描述】:

我有一个用例,需要在 iframe 中呈现复杂的 UI 层次结构,但处理它的逻辑(创建、输入文档、事件处理、退出文档)需要在主框架/应用程序中。

我在获取对 iframe 的 Document 实例的类型化引用时遇到问题。这可能吗?即使使用类型转换,代码也会出错。

任何建议都会有所帮助,除了使用 js 互操作的建议 - 像提取 UI 分支并将其安装在 iframe 中这样简单的事情不应该需要这个恕我直言。

另外,如果这不可能,我应该去哪里填补错误?

【问题讨论】:

  • 有几个相关的错误。您没有提供任何代码来显示您实际尝试过的内容,也没有提供任何错误消息,因此很难说出确切适用的内容。主要原因是 Dart 团队试图保护跨窗口访问,现在它处于无法使用的状态。见dartbug.com/20944dartbug.com/20146dartbug.com/20173dartbug.com/20174dartbug.com/16814,(已关闭,仅供参考dartbug.com/2312dartbug.com/1928)和更多(搜索_DOMWindowCrossFrame)
  • 我只是想在 iframe 中获取对 html.Document 的引用,并希望像 html.document 一样使用它。

标签: dart dart-html


【解决方案1】:

出于安全考虑,跨窗口访问非常有限。有开放的问题可以再次允许它,因为无论如何它都可以被 dart-js-interop 规避。

所以建议的解决方案是使用dart:js 作为解决方法,直到问题得到解决。

  var ifrm = new js.JsObject.fromBrowserObject(dom.querySelector('#ifrm'));
  print(ifrm['contentWindow']);
  print(ifrm['contentDocument']);

【讨论】:

  • 我目前正在使用 dart:js 尝试它,但它仍然无法正常工作(js.context['window']['frameid'] 也不允许......我该怎么做?
  • js.context('window'].['frames'][0]) 呢?
  • 我不明白,似乎根本不是一个有效的 dart 表达式,而且似乎 Dart 发现 content[frames][index] 的结果是一个 IframeElement 并且不允许使用[]:类“IFrameElement”没有实例方法“[]”。
  • 谢谢,那么我该如何使用这个 'HTMLDocument' 作为 dart html.Document?目前它仍然认为它是一个 JsObject?
  • 我不认为你可以从这个 JsObject 中得到一个 typed/Dart 对象。据我所知,您所能做的就是使用 dart-js-interop 与之交互。
【解决方案2】:

尝试使用window.postMessage() 在帧之间传输 DOM 更新。我猜这可能是一种可能性?

【讨论】:

  • 是一个选项,但是开销更大,不适合与RAF同步。
猜你喜欢
  • 1970-01-01
  • 2011-11-26
  • 2013-04-17
  • 1970-01-01
  • 2012-11-12
  • 2017-06-06
  • 2020-11-19
  • 1970-01-01
  • 2017-08-12
相关资源
最近更新 更多