共享物件

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

Flash Player 提供使用「共享物件」的功能,這是在 SWF 檔之外持續運作的 ActionScript 物件,可在使用者的檔案系統上本機執行,也能以遠端方式在 RTMP 伺服器中執行。共享物件與 Flash Player 中其它媒體相同,都會進行分割處理並置入安全執行程序中。但是,共享物件的安全執行程序模型有些不同,因為共享物件是不能夠跨越網域界限存取的資源。共享物件是一定要從共享物件存放區中擷取,該存放區是特屬呼叫 SharedObject 類別的方法之各個 SWF 檔所在網域。一般來說,共享物件存放區甚至比 SWF 檔的網域更為特定:根據預設,每個 SWF 檔都會使用特屬其整個原始 URL 的共享物件存放區。如需有關共享物件的詳細資訊,請參閱 共享物件

SWF 檔可以使用 SharedObject.getLocal() SharedObject.getRemote() 方法的 localPath 參數,以便使用僅與其 URL 部分相關聯的共享物件存放區。如此一來,SWF 檔就可以允許與其它 URL 的其它 SWF 檔共享。即使傳遞 '/' 做為 localPath 參數,也還是指定其本身網域專屬的共享物件存放區。

使用者可以使用「Flash Player 設定」對話方塊或「設定管理員」,限制存取共享物件。依預設,每個網域可建立的最大共享物件為 100 KB 的資料。系統管理使用者及使用者也可以限制寫入檔案系統的能力。如需詳細資訊,請參閱 系統管理員控制 使用者控制

您可以透過將 SharedObject.getLocal() 方法或 SharedObject.getRemote() 方法的 secure 參數指定為 true ,指定共享物件為安全物件。請注意下列 secure 參數的相關事項:

  • 如果這個參數設為 true ,Flash Player 會建立新的安全共享物件,或取得現有之安全共享物件的參照。而這個安全的共享物件只能透過由 HTTPS 傳遞的 SWF 檔來讀取或寫入,方法是呼叫 secure 參數設為 true SharedObject.getLocal()

  • 如果此參數設定為 false ,Flash Player 就會建立新的共享物件,或取得現有共享物件 (可由透過非 HTTPS 連線傳遞的 SWF 檔讀取或寫入) 的參照。

如果呼叫的 SWF 檔不是來自 HTTPS URL,那麼為 SharedObject.getLocal() 方法或 SharedObject.getRemote() 方法的 secure 參數指定 true 的結果就會產生 SecurityError 例外。

共享物件存放區是根據 SWF 檔的原始 URL 進行選擇。即使在匯入載入及動態載入的情況下,SWF 檔不是源自簡單 URL 也是如此。匯入載入是指在將 LoaderContext.securityDomain 屬性設為 SecurityDomain.currentDomain 下載入 SWF 檔的情形。在這種情況下,被載入端 SWF 檔會有虛擬 URL,以其載入端 SWF 檔的網域開頭,然後指定其實際的原始 URL。動態載入是指使用 Loader.loadBytes() 方法載入 SWF 檔的作業。在這種情況下,被載入端 SWF 檔會有虛擬 URL,以其載入端 SWF 檔的網域開頭,然後指定其實際的原始 URL。在匯入載入和動態載入情況下,SWF 檔的虛擬 URL 可以使用 LoaderInfo.url 屬性進行檢查。在選擇共享物件存放區時,虛擬 URL 會視為與真正的 URL 完全一樣。您可以指定使用部分或全部虛擬 URL 的共享物件 localPath 參數。

使用者和系統管理員都可以選擇停用「協力廠商共享物件」。當 SWF 檔的原始 URL 是來自與瀏覽器位址列中所顯示 URL 不同網域時,這是任何在網頁瀏覽器中執行之 SWF 檔的共享物件用法。使用者和系統管理員可以因隱私權的關係,選擇停用協力廠商共享物件用法,以避免跨網域追蹤。為了要避開這項限制,您可能要確保使用共享物件的任何 SWF 檔在載入時,一定在確保該 SWF 檔是來自與瀏覽器位址列中所顯示網域的 HTML 網頁結構之內。當您嘗試使用來自協力廠商的共享物件,而且該協力廠商共享物件已遭停用時, SharedObject.getLocal() SharedObject.getRemote() 方法就會傳回 null 。如需詳細資訊,請參閱 www.adobe.com/products/flashplayer/articles/thirdpartylso