我試圖執行一個函數,如window.alert
例如,從actionscript,當html文件和swf文件都使用file:
協議。有沒有什麼辦法從本地內容的actionscript執行js函數?
有人知道這樣做嗎?
不改變全球閃存安全設置
我試圖執行一個函數,如window.alert
例如,從actionscript,當html文件和swf文件都使用file:
協議。有沒有什麼辦法從本地內容的actionscript執行js函數?
有人知道這樣做嗎?
不改變全球閃存安全設置
看完Controlling access to scripts in a host web page後看起來不可能。
對於在本地運行的SWF文件,只有當SWF文件和包含的網頁(如果有的話)位於本地信任的安全沙箱中,才能成功調用這些API。如果內容位於本地網絡或本地文件系統沙箱中,則調用這些方法失敗。
然後在本地沙箱this page基本上說這是行不通的,除非SWF處於「受信任的本地沙箱」的用戶或安裝就需要把它英寸
This blog post有關「本地文件系統沙箱「說:
首先,我認爲這裏的文檔有點太慷慨了。從本地文件系統加載的SWF確實面臨一些限制。最相關的限制可能是:
- 的SWF做不出來的JavaScript(或VBScript)的調用,無論是通過URL或ExternalInterface的
- 的SWF不能稱之爲HTTP或HTTPS請求。
- 查詢字符串參數(例如Blah.php?查詢字符串= QS值)被剝離,並不會傳遞(即使是要求對本地文件)
您需要更新Flash Player settings,使您的文件路徑被列爲「受信任的位置。」然後您將能夠使用外部接口和其他JS通信方法。
此外,您無法使用外部接口從AS傳遞默認JS功能(如警報)。你需要編寫自定義的功能...
的ActionScript:
import flash.external.ExternalInterface;
ExternalInterface.call("alertFromFlash", 'hello');
的JavaScript:
function alertFromFlash(str) {
alert(str);
}
另外,如果你在它分發給客戶。解釋如何更改Flash Player設置可能很困難,因此您可以使用CD來運行服務器,從而繞過安全設置。我在過去曾與Flying Ant server祝你好運。
有一個文檔「Controlling access to scripts in a host web page」,它描述了允許Flash內容與Javascript交互的各種方式和限制。
根據文檔,只要您的embed標籤包含AllowScriptAccess設置爲「always」,無論頁面從哪裏加載,您都應該沒問題。
啊它說,如果'allowScriptAccess =「always」',域名無所謂,但在此之前它說:「對於本地運行的SWF文件,只有在SWF文件和包含網頁(如果存在一個)位於受信任的本地安全沙箱中,如果內容位於本地網絡或本地文件系統沙箱中,則對這些方法的調用將失敗。所以我不認爲這是可能的。 – erikvold
對不起,我做了我的問題更加清晰,我不希望用戶必須改變他們的全球閃光燈設置。 – erikvold
然後運行本地服務器,就像我上面所描述的那樣,是唯一的出路。 –
P.S.或者以嵌入Flash的HTML/JS AIR應用程序的形式發佈,但必須由用戶安裝。 –