控制外傳 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() 函數有第二個選擇性的參數 - targettarget 參數可以用來指定 HTML 視窗或影格的名稱,以便傳送 URL 要求。這種要求也套用了其他安全性限制,而其限制則取決於是否已使用 navigateToURL() 做為指令碼或非指令碼陳述式。

若為指令碼陳述式,例如 navigateToURL("javascript: alert('Hello from Flash Player.')"),則套用下列規則。

  • 如果 SWF 檔是本機受信任的檔案,要求就會成功。

  • 如果目標是 SWF 檔所嵌入的 HTML 網頁,則套用上述的 allowScriptAccess 規則。

  • 如果目標保存從與 SWF 檔相同網域載入的內容,則要求會成功。

  • 如果目標保存從與 SWF 檔不同網域載入的內容時,則上述兩個條件都不符合,要求會失敗。

若為非指令碼陳述式 (例如 HTTP、HTTPS 和 mailto:,如果套用下列所有條件,則要求會失敗:

  • 目標是其中一個特殊的關鍵字 "_top""_parent",而且

  • SWF 檔是位於從不同網域裝載的網頁中,並且

  • SWF 檔是以 allowScriptAccess 為非 "always" 的值嵌入。

如需詳細資訊

如需外傳 URL 存取的詳細資訊,請參閱「適用於 Adobe Flash Platform 的 ActionScript 3.0 參考」中的下列項目: