控制存取指令碼 | 主機網頁

ActionScript 3.0 API

透過使用下列 ActionScript 3.0 API,達成傳出指令碼與 URL 存取 (使用 HTTP URL、mailto: 等):

  • flash.system.fscommand() 函數
  • ExternalInterface.call() 方法
  • flash.net.navigateToURL() 函數

如果是本機執行的 SWF 檔案,只有 SWF 檔案與包含網頁在本機信任的安全性沙盒中,對 API 的呼叫才會成功。如果內容在 local-with-networking 或 local-with-file 的系統沙盒中,則對這些方法的呼叫就會失敗。

HTML 程式碼中的 AllowScriptAccess 參數會載入 SWF 檔案,控制從 SWF 檔案內部執行傳出 URL 存取的功能。在「PARAM」或「EMBED」標籤中設定此參數。如果 AllowScriptAccess 沒有設定值,則只有在 SWF 檔案和 HTML 頁面來自相同網域時,兩者才能溝通。

AllowScriptAccess 參數可具有下列三個可能值的其中一個:「always」、「sameDomain」或「never」。

  • 當 AllowScriptAccess 為「always」時,SWF 檔案可與其嵌入的 HTML 網頁溝通。即使 SWF 檔案來自不同於 HTML 頁面的其他網域,此規則亦適用。
  • 當 AllowScriptAccess 為「sameDomain」時,只有在 SWF 檔案來自相同網域時,SWF 檔案才可與其嵌入的 HTML 頁面溝通。這個值為 AllowScriptAccess 的預設值。若要防止從某個網域託管的 SWF 檔案存取其他網域上之 HTML 頁面中的指令碼,請使用此設定。或者,不要為 AllowScriptAccess 設定值。
  • 當 AllowScriptAccess 為「never」時,SWF 檔案無法與任何 HTML 頁面溝通。不再支援使用此值,也不建議使用,且如果您不會從自身網域提供不信任的 SWF 檔案,就不必使用此值。如果必須提供不信任的 SWF 檔案,Adobe 建議您建立一個不同的子網域,然後將所有不信任的內容放在那裡。

使用 navigateToURL() 函數

除了上述論及之 allowScriptAccess 函數指定的安全性設定外,navigateToURL() 函數還有一個可選的第二參數。您可以使用此參數 (目標) 來指定要傳送 URL 請求之 HTML 視窗或框架的名稱。其他安全性限制可套用至這類請求。這些限制會根據 navigateToURL() 是否用來作為指令碼或非指令碼陳述式而有所不同。

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

  • 如果 SWF 檔案是本機信任的檔案,則請求成功。
  • 如果目標為內嵌 SWF 檔案的 HTML 頁面,則適用上述的 allowScriptAccess 規則。
  • 如果目標保存從與 SWF 檔案相同的網域所載入的內容,則請求成功。
  • 如果目標保存從不同於 SWF 檔案的網域所載入的內容,也不符合前面兩項條件時,則請求失敗。

若為非指令碼陳述式 (HTTP、HTTPS、mailto: 等),如果下列條件皆符合,則請求失敗。

  • 目標為「_top」或「_parent」其中一個特殊關鍵字,且
  • SWF 檔案位於從其他網域託管的網頁中。此外,
  • SWF 檔案內嵌一個非「always」的 AllowScriptAccess 值。

 

關鍵字: AllowScriptAccess, Flash Player, Flash, Flex, fscommand, ExternalInterface, navigateToURL, sandbox; tn_16494

Adobe 標誌

登入您的帳戶