控制外傳 URL 存取
Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本
外傳指令碼編寫和 URL 存取 (透過使用 HTTP URL、mailto: 等等) 是透過使用下列 API 來達成:
-
flash.system.fscommand()
函數
-
ExternalInterface.call()
方法
-
flash.net.navigateToURL()
函數
針對從本機檔案系統載入的內容,只有在程式碼和包含網頁 (如果有的話) 位於本機信任或 AIR 應用程式安全執行程序時,才能成功呼叫這些方法。如果內容在具有網路的本機或具有檔案系統的本機安全執行程序中,呼叫這些方法就會失敗。
針對不在本機載入的內容,所有這些 API 都可以與內嵌的網頁通訊 (取決於如下所述的 AllowScriptAccess 參數的值)。
flash.net.navigateToURL()
函數有額外功能可與任何已開啟的瀏覽器視窗或影格通訊,而不只是 SWF 檔所嵌入的網頁。如需有關此函數的詳細資訊,請參閱
使用 navigateToURL() 函數
。
載入 SWF 檔之 HTML 程式碼中的
AllowScriptAccess
參數可控制是否能從 SWF 檔之內執行外傳 URL 存取。在 PARAM 或 EMBED 標籤之內設定此參數。如果沒有為
AllowScriptAccess
設定任何值,SWF 檔和 HTML 網頁只有在都是來自相同的網域時才能進行通訊。
AllowScriptAccess
參數可以有以下其中一個可能值:
"always"
、
"sameDomain"
或
"never"
。
-
當
AllowScriptAccess
設為
"always"
時,SWF 檔可以與所嵌入的 HTML 網頁進行通訊,即使 SWF 檔與 HTML 網頁位於不同的網域也可以通訊。
-
當
AllowScriptAccess
設為
"sameDomain"
時,SWF 檔只有在 SWF 檔與 HTML 網頁位於相同的網域,SWF 檔才能與嵌入的 HTML 網頁進行通訊。這個值是
AllowScriptAccess
的預設值。使用此設定,或是不要設定
AllowScriptAccess
的值,可防止從一個網域裝載的 SWF 檔存取來自另一個網域之 HTML 網頁中的指令碼。
-
當
AllowScriptAccess
設為
"never"
時,SWF 檔無法與任何 HTML 網頁進行通訊。從 Adobe Flash CS4 Professional 版本開始,已不建議使用此值。如果您不會從自己的網域提供未受信任的 SWF 檔,那麼便不建議使用這個值,而且也沒有必要。如果您的確需要提供不受信任的 SWF 檔,Adobe 建議您特別建立子網域,在此放置所有不受信任的內容。
以下是在 HTML 網頁中設定
AllowScriptAccess
標籤以允許傳出 URL 存取至不同網域的範例:
<object id='MyMovie.swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='100%' width='100%'>
<param name='AllowScriptAccess' value='always'/>
<param name='src' value=''MyMovie.swf'/>
<embed name='MyMovie.swf' pluginspage='http://www.adobe.com/go/getflashplayer' src='MyMovie.swf' height='100%' width='100%' AllowScriptAccess='never'/>
</object>
使用 navigateToURL() 函數
除了上述所討論由
allowScriptAccess
參數指定的安全設定以外,
navigateToURL()
函數有第二個選擇性的參數 -
target
。
target
參數可以用來指定 HTML 視窗或影格的名稱,以便傳送 URL 要求。這種要求也套用了其他安全性限制,而其限制則取決於是否已使用
navigateToURL()
做為指令碼或非指令碼陳述式。
若為指令碼陳述式,例如
navigateToURL("javascript: alert('Hello from Flash Player.')")
,則套用下列規則。
-
如果 SWF 檔是本機受信任的檔案,要求就會成功。
-
如果目標是 SWF 檔所嵌入的 HTML 網頁,則套用上述的
allowScriptAccess
規則。
-
如果目標保存從與 SWF 檔相同網域載入的內容,則要求會成功。
-
如果目標保存從與 SWF 檔不同網域載入的內容時,則上述兩個條件都不符合,要求會失敗。
若為非指令碼陳述式 (例如 HTTP、HTTPS 和
mailto:
,如果套用下列所有條件,則要求會失敗:
如需詳細資訊
如需外傳 URL 存取的詳細資訊,請參閱「適用於 Adobe Flash Platform 的 ActionScript 3.0 參考」中的下列項目:
|
|
|