我正在使用第三方swf,我無法更改,並且負責使其在本地環境中工作,並在我構建的容器應用程序中加載。 SWF是爲訪問網絡沙箱而發佈的,所以無論何時調用本地html容器中的ExternalInterface,它都會拋出安全沙箱錯誤並終止執行。 ExternalInterface調用都是非關鍵的(記錄),所以如果我能以某種方式阻止它們,那麼我就不會再有問題了。防止swf調用ExternalInterface調用而不重新編譯它
我非常確定這不可能,但我希望有人在這裏可以證明,否則。
我正在使用第三方swf,我無法更改,並且負責使其在本地環境中工作,並在我構建的容器應用程序中加載。 SWF是爲訪問網絡沙箱而發佈的,所以無論何時調用本地html容器中的ExternalInterface,它都會拋出安全沙箱錯誤並終止執行。 ExternalInterface調用都是非關鍵的(記錄),所以如果我能以某種方式阻止它們,那麼我就不會再有問題了。防止swf調用ExternalInterface調用而不重新編譯它
我非常確定這不可能,但我希望有人在這裏可以證明,否則。
我不認爲這是可能的(或者至少它不是微不足道的)。我曾經在一個AS 2.0項目中使用FLASM這個actionscript彙編/反彙編程序做了類似的事情(只是刪除了幾個調用)。但是這個工具只適用於AS 2.0,我不知道其他類似的AS 3.0工具(儘管有些可能存在)。
但是,也許你可以設置一個本地web服務器,它足夠簡單(Windows上的WAMP,XAMP等)並運行你的html,而不是直接從文件系統運行它。在這種情況下,這可能是一個簡單的解決方法。
我可能會遺漏一些東西,但外部接口主要用於在SWF的父級調用JavaScript。
正在引發的安全錯誤應指示它試圖調用的內容。在包裝SWF的HTML中,您只需提供SWF嘗試調用的方法。
所以SWF可能有ExternalInterface.call("js_function");
等在包裝有
<script>
function js_function() { // do nothing }
</script>
哈克的地獄,但你在你父應用程序可以編輯ExternalInterface類的.prototype取代「呼」與函數你自己選擇的。我沒有測試過這一點,這只是一個理論,但它會是這個樣子:
// in your main application's wrapper, before you load in the .swf you're working with
ExternalInterface.prototype.call = function(value:String):void {
trace("You just tried to call a js function called '" + value + "', but I intercepted it.");
}
我會給它一個機會,但是Adobe在AS3中搶奪了它大部分功能的原型。我會讓你知道它是否有效。 – 2011-04-17 05:02:26
沒有骰子。遺憾的是,無法通過原型鏈重新定義AS3中的函數。 – 2011-04-19 12:35:59
安全沙盒限制防止內SWF從調用JavaScript的根本,無論是否存在的功能,因爲內部的swf編譯爲網絡訪問而不是本地文件系統訪問。 – 2011-04-17 05:01:30
好吧,您可以使用Macromedia Flash Local內容更新程序,它允許您更改SWF的SWF安全設置引用Adobe:'此工具允許您更改SWF文件作爲本地播放時運行的安全沙箱Flash Player 8及以上版本的文件「。點擊此處下載http://www.adobe.com/support/flashplayer/downloads.html下面 – Chris 2011-04-17 05:53:08
感謝您提醒我關於這個工具,雖然它還沒有解決我的問題。這似乎是棘手的; Adobe已經在本地內容周圍加強了安全沙箱,所以我不得不尋求其他選擇。 – 2011-04-19 12:42:19