Adobe AIR 的
HTMLLoader
類別可定義顯示物件,在 AIR 應用程式中顯示 HTML 內容。SWF 類型的應用程式可以將 HTMLLoader 控制項加入至現有視窗,或者使用
HTMLLoader.createRootWindow()
方法,建立會自動包含 HTMLLoader 物件的 HTML 視窗。從載入的 HTML 網頁中,透過 JavaScript
window.htmlLoader
屬性即可存取 HTMLLoader 物件。
從 URL 載入 HTML 內容
下列程式碼會將一個 URL 載入 HTMLLoader 物件中 (將 HTMLLoader 新增為舞台的子內容,或新增為其它顯示物件容器,以顯示應用程式的 HTML 內容):
import flash.html.HTMLLoader;
var html:HTMLLoader = new HTMLLoader;
html.width = 400;
html.height = 600;
var urlReq:URLRequest = new URLRequest("http://www.adobe.com/");
html.load(urlReq);
根據預設,HTMLLoader 物件的
width
和
height
屬性都設定為 0。將 HTMLLoader 物件加入舞台時,您就必須設定這兩個屬性的值。載入網頁時,HTMLLoader 會傳送數個事件。您可以使用這些事件,判斷與載入網頁的互動是否安全。這些事件都會在
在 AIR 中處理 HTML 相關事件
中加以說明。
備註:
在 Flex 架構中,只有會擴充 UIComponent 類別的類別才能加入做為 Flex Container 組件的子系。如此一來,您就不能直接將 HTMLLoader 加入做為 Flex Container 組件的子系,但是可以使用 Flex mx:HTML 控制項。您可以建置自訂類別,讓這個類別擴充 UIComponent 並包含 HTMLLoader 做為 UIComponent 的子系,也可以加入 HTMLLoader 做為 UIComponent 的子系,並將此 UIComponent 加入 Flex 容器中。
您也可以使用 TextField 類別來呈現 HTML 文字,但是功能會受到限制。The Adobe® Flash® Player 的 TextField 類別支援 HTML 標記的子集,但是基於大小限制,功能也會受到限制 (包含在 Adobe AIR 中的 HTMLLoader 類別無法在 Flash Player 中使用)。
從字串載入 HTML 內容
HTMLLoader 物件的
loadString()
方法會將 HTML 內容的字串載入 HTMLLoader 物件中:
var html:HTMLLoader = new HTMLLoader();
var htmlStr:String = "<html><body>Hello <b>world</b>.</body></html>";
html.loadString(htmlStr);
根據預設,透過
loadString()
方法所載入的內容會放在一個具有下列特性的非應用程式安全執行程序中:
-
具有透過網路載入內容的權限 (非透過檔案系統)。
-
它無法使用 XMLHttpRequest 來載入資料。
-
window.location
屬性設為
"about:blank"
。
-
其內容無法存取
window.runtime
屬性 (如同其它非應用程式安全執行程序的內容存取一般)。
在 AIR 1.5 中,HTMLLoader 類別包含一個
placeLoadStringContentInApplicationSandbox
屬性。當 HTMLLoader 物件的這個屬性設為
true
時,透過
loadString()
方法所載入的內容就會放在應用程式安全執行程序中 (預設值為
false
)。如此,經由
loadString()
方法所載入的內容就可以存取
window.runtime
屬性和所有的 AIR API。如果將這個屬性設定為
true
,請確定您在呼叫
loadString()
方法時所用的字串是來自一個受信任的資料來源。當這個屬性設為
true
時,HTML 字串中的程式碼陳述式就會以完整的應用程式權限執行。請只有確定字串中未包含有害的程式碼時,才將這個屬性設為
true
。
在以 AIR 1.0 或 AIR 1.1 SDK 編譯的應用程式中,透過
loadString()
方法所載入的內容會放在應用程式安全執行程序中。
在 AIR 應用程式中使用 HTML 時必須注意的安全性規則
與 AIR 應用程式一併安裝的檔案都可以存取 AIR API。但是,基於安全性理由,來自其它來源的內容則無法存取 AIR API。舉例來說,這項限制可以避免遠端網域 (例如 http://example.com) 中的內容讀取使用者之桌面目錄中的內容 (或更糟的情況)。
由於有些安全性漏洞,讓惡意使用者可以透過呼叫
eval()
函數 (和相關的 API) 進行攻擊,因此與應用程式一併安裝的內容預設無法使用這些方法。不過,某些 Ajax 架構會呼叫
eval()
函數和相關 API。
因此,若要在 AIR 應用程式中建立正確運作的內容架構,您必須針對來自不同來源的內容,審慎考量規則來制定安全性限制。來自不同來源的內容都會置於不同的安全性分類中,這些分類稱為安全執行程序 (請參閱
安全執行程序
)。根據預設,與應用程式一併安裝的內容會安裝在名為「應用程式」安全執行程序的安全執行程序中,這個安全執行程序會將 AIR API 的存取權限授與此內容。應用程式安全執行程序通常是最安全的安全執行程序,其各項限制都是設計用來避免執行不受信任的程式碼。
執行階段可讓您將與應用程式一併安裝的內容載入至應用程式安全執行程序以外的安全執行程序。非應用程式安全執行程序中之內容會在安全性環境中運作,這個環境與典型網頁瀏覽器的安全性環境類似。例如,非應用程式安全執行程序中的程式碼可以使用
eval()
和相關的方法 (但同時也不允許程式碼存取 AIR API)。執行階段包含各種方式,讓不同安全執行程序中的內容在溝通時確保其安全性 (且不會將 AIR API 公開給非應用程式的內容)。如需詳細資訊,請參閱
跨指令碼處理不同安全執行程序中內容
。
如果您呼叫因為安全性因素而禁止在安全執行程序中使用的程式碼,執行階段便會傳送下列 JavaScript 錯誤:「應用程式安全執行程序中的 JavaScript 程式碼造成 Adobe AIR 執行階段安全性違規」。
若要避免發生這個錯誤,請遵循下節
避免發生與安全性有關的 JavaScript 錯誤
所描述的程式碼做法。
如需詳細資訊,請參閱
Adobe AIR 的 HTML 安全性
。
|
|
|