2010年11月12日 星期五

[引用]AIR筆記 – 使用MX:HTML

source link :http://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屬性

1. private function clickHandler(evt:Object):void {
2. trace(”click”);
3. }

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中的父文檔直接創建沙箱橋接口

【下列文章您可能也有興趣】

沒有留言: