【问题标题】:AS3 AIR: How to remove html elements in HTMLLoader before render?AS3 AIR:如何在渲染前删除 HTMLLoader 中的 html 元素?
【发布时间】:2011-12-24 14:34:09
【问题描述】:

我正在制作一个 Adob​​e Air 的自定义网络浏览器。

我想添加一个禁用 javascript 和 iframe 的 html 过滤器功能。

如果我可以在渲染之前获得 html 代码,我会使用正则表达式删除标记元素。

我想我可以在 htmlloader 的 LocationChangeEvent 调度时使用 htmlloader。

【问题讨论】:

  • 那么,你尝试了什么?你搜索过什么吗?你有具体的问题吗?有代码吗?没有任何细节,很难回答你的问题。

标签: flash actionscript-3 actionscript air


【解决方案1】:

Kim,您可以使用以下方式访问 HTML:

myHtmlLoader.window.document.childNodes[0].innerHTML

但您需要确保在加载文档之前不访问它(见上文),否则它将为空。

当我在加载一个简单文件时使用上面的代码时,我看到了这个:

<body marginwidth="0" marginheight="0">hello world</body>

如果您无法让它与上述内容一起使用,请告诉我,我会尝试编写一些示例代码。

【讨论】:

  • Kim,这对你有用还是你需要一些示例代码?如果有效,请接受此答案并关闭问题。谢谢!
【解决方案2】:

您需要在加载程序上捕获Event.HTML_DOM_INITIALIZE。此时,html 已加载,DOM 树已创建,脚本尚未启动。然后您可以从加载器中获取window 对象并修改其子层次结构(请注意,这不是使用正则表达式删除标签。)
您还可以获取加载的 html,将其解析为文本,应用过滤器并将过滤后的文本再次设置为 html,但随后您将收到另一个 HTML_DOM_INITIALIZE 事件和损坏 html 的风险。当然,选择权在你。

【讨论】:

  • 我修改了什么属性? htmlLoader.widow 中有很多属性。我尝试过,但失败了。 'htmlLoader.window.HTMLIFRAMEElement = null' 不起作用。在 dom init 事件中,document.getElement 方法不返回任何内容。 (getElementById,TagName 在完成事件分派后正常工作)。请帮助我更多...谢谢。
  • 你需要 domWindow.document 对象。它有 childNodes 属性,所有的 html 元素都存储在这里。
  • window.document.childNodes.item() 仅在“html_dom_initialize”事件调度时返回 null。它在发送“完成”事件后返回 html 元素(包括 innerHTML)。我想要一个 iframe 过滤器。所以我应该在“完成”事件调度之前删除 iframe 元素(或在 htmlcontent 字符串上删除它)。我花了几天时间来解决这个问题。但我找不到解决方案。 :( 无论如何感谢您的回答。
  • 还有htmlText 属性要搞砸。如果您更改文本并重新设置,您将获得另一组事件(内容的来源与原始网站不同。)
  • 你是说flex的html.htmlText?如果是这样,它也返回 null。我在 htmlLoader 或 window.document 对象中找不到 htmlText 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 2014-04-28
  • 2017-08-18
  • 1970-01-01
相关资源
最近更新 更多