`
vu060vu
  • 浏览: 12596 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

AIR笔记 使用HTML

阅读更多

AIR笔记   使用HTML
2011年05月17日
  air2.5的webkit
  c++ singleton实现
  flash 2011-02-25 16:25:15 阅读40 评论0   字号:大小 订阅
  来自:http://www.ebibi.com/i/experience/2010/0707/263.html
  1. 使用flash.html.HTMLLoader读入HTML内容,
  load()读入页面等资源, loadString()读入一个HTML串
  2. 如果系统上安装了Acrobat Reader 8.1 以上的插件, 则可以用同样的方法加载和呈现PDF了.
  可以用 HTMLLoader.pdfCapability 属性判断PDF特性是否可用, 返回四种值:
  STATUS_OK(可用) 三种ERROR(没安装, 安装版本过旧, 优先使用版本过旧)
  3. 在Flex工程中, 可以使用  来取代HTMLLoader
  指定location属性, 可以使HTML组件自动加载并呈现内容
  HTML组件并不直接支持 loadString()
  但可以通过其 htmlLoader 属性, 获得其包装的HTMLLoader对象, 间接实现
  4. 如果不想缓存内容, 应该在 load() 之前设置 HTMLLoader对象的 cacheResponse = false
  如果不想优先读取本地缓存, 在 load() 之前设置 useCache = false
  5. 如果碰到需要身份验证的站点, AIR默认会弹出 用户名/密码 对话框
  如果想禁止弹出, 设置 authenticate = false, 但这样会导致服务器返回错误
  6. 可以设置 userAgent 属性以实现ua欺骗
  7. 设置 manageCookies = false 可以禁止在本地存储cookie
  8. 如果不想针对每个 HTMLLoader 实例设置上述属性,
  可以用 URLRequestDefaults类的静态方法统一设置
  9. 内容超出范围的情况下, 在 控件中, 使用flex内置的 …Policy 属性即可调节滚动条
  10. 使用as时, 监听HTMLLoader的complete事件, 而后即可获知contentWidth和contentHeight属性
  使用scrollH和scrollV属性可以控制内容向右和向下的移动值
  11. var hl:HTMLLoader = HTMLLoader.createRootWindow([可选的参数]);
  hl.load(…);
  这样将把加载的内容放到一个AIR窗口中, 并且该窗口可以自动添加滚动条
  12. 使用 HTMLHistoryItem 对象来保存浏览历史, 包括以下属性
  url -> 页面的url
  originalUrl -> 初始url(可能的跳转之前)
  title -> 页面的title
  isPost -> 是否包含post数据
  HTMLLoader对象的属性 historyLength 指示了历史项目的数量
  用 getHistoryAt() 返回对应的 HTMLHistoryItem 对象
  也可以使用 HTMLLoader对象的 historyBack(), historyForward(), historyGo() 实现导航
  13. AIR并不仅仅能加载和呈现HTML, 因为HTMLLoader暴露了所加载HTML内容的全部DOM,
  所以可以与其交互, 但需要等待内容加载完
  HTMLLoader对象的window 对应了 HTML内容中js的window对象,
  可以直接读取其属性或调用其方法等
  如果把一个function赋值到一个js方法上, 会替换该方法的动作
  _htmlLoader.window.xxx = function():void { trace(”xxx”); };
  可以用和js类似的方法操作DOM
  _htmlLoader.window.document.getElementById(”p1″).innerTEXT = “xxx”;
  14. 有两种方法可以注册对js方法的监听: 在HTML元素的事件属性上赋值 以及 使用addEventListener()
  比如 _htmlLoader.window.document.getElementById(”p1″).onclick = clickHandler;
  或 _htmlLoader.window.document.getElementById(”p1″).addEventListener(”click”, clickHandler);
  处理函数接受一个类型为 Object 的事件对象, 包含了 target 和 currentTarget属性
  private function clickHandler(evt:Object):void {  trace(”click”);  }
  15. 可以通过继承 HTMLHost 类来实现对 Window.status Window.focus() 等属性和方法的定义
  并指定到HTMLLoader对象的htmlHost属性上
  16. 在所加载HTML的js中, 可以使用 window.runtime 来调用一切 Flash Player APIs
  比如 window.runtime.trace()
  window.runtime.flash.desktop.NativeApplication.nativeApplication.openedWindows[0]
  如果要在js中调用自定义的类型, 需要将HTML内容加载到same ApplicationDomain
  _htmlLoader.runtimeApplictionDomain = ApplicationDomain.currentDomain;
  17. 所有加载到AIR中的HTML内容都有sandbox限制
  从 application目录或子目录加载的, 为 application sandbox
  从其他地方加载的, 为 noapplication sandbox
  application sandbox 中禁止的操作有:
  1). eval()只能用于字面量和常量
  2). setTimeout()和setInterval()只能调用字面量的方法, 不能执行字符串
  3). innerTEXT和innerHTML中不能包含script
  4). 不能使用 ‘javascript’ 关键字作为URI配置
  5). 不能载入application domain之外的外部js文件
  这些限制尽量屏蔽了恶意的js代码, 保证application domain中的js相对安全的获得包括本地文件操作在内的AIR API
  外部载入的js没有以上限制, 但虽然它可以不受控制的执行eval(), 却是没有访问本地文件系统权限的
  18. 当绝对需要时, 也可以使用 sandbox bridging 技术
  一种跨域脚本访问方法, 在noapplication sandbox中的内容与其在application sandbox中的父文档直接创建沙箱桥接口
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics