2011-04-03 70 views
0

在Flex 4中我的AIR應用程序中,我使用MX:HTML,當我瀏覽到一個位置,這樣禁用警報關於Flex javascript函數4 AIR的HTMLLoader

html.location = 'http://www.somesite.com'; 

但是,一些網站有「警惕」功能在JavaScript這樣的:

alert('hello world!'); 

和AIR顯示在一個盒子裏的消息...

我只是想刪除或忽略這些MES先賢,但我不知道怎麼...

我認爲解決的辦法是延長的HTMLLoader類,但我在Flex中的經驗是太可憐了..

有人能幫助我嗎?

預先感謝:)

回答

0

這是我能找到的最好的事情:

http://help.adobe.com/en_US/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7e74.html#WS5b3ccc516d4fbf351e63e3d118666ade46-7e72

看起來如你所說,你可以擴展爲HTMLLoader並覆蓋JavaScript的回調。我沒有嘗試過,所以我不確定,但值得一試。

+0

謝謝您的回答,正確的,我們可以覆蓋一些JavaScript函數,但是Adobe給予名單: window.status window.document.title的 window.location的 window.blur() window.close()的 窗口.focus() window.moveBy() window.moveTo() window.open() window.resizeBy() window.resizeTo() 不幸的是,報警功能不就行了...我不不知道該怎麼辦! – dizda 2011-04-04 21:21:14

+0

這個想法可能是像這樣替換本地警報功能:http://jsfiddle.net/77QEQ/5/ 但是,我怎樣才能注入一些代碼到MX:HTML? – dizda 2011-05-22 11:31:25

0

經過調試和測試,我發現HTMLLoader有一個屬性窗口。這個窗口就像javascript DOM窗口。

您可以使用以下代碼來禁用警報

public class MyHTMLLoader extends HTMLLoader 
{ 
    override public function MyHTMLLoader() 
    { 
     super(); 
     this.addEventListener(Event.HTML_DOM_INITIALIZE, htmlDomInitializedHandler); 
    } 

    protected function htmlDomInitializedHandler(event:Event):void 
    { 
     window.alert = function(){}; 
    } 
} 

和修改HTML組件屬性htmlLoaderFactory到...

<mx:HTML htmlLoaderFactory="{new ClassFactory(MyHTMLLoader)}" ... 

希望這會幫助你。

+0

感謝您的貢獻,但這不適合我。我嘗試加載這個URL http://jsfiddle.net/77QEQ/,但它仍然顯示警告消息框。不知道爲什麼,因爲你的解決方案聽起來是正確的方式! – dizda 2013-01-20 23:08:34

+0

而這很奇怪,因爲當我調試這個時,調試器會傳入htmlDomInitializedHandler函數,但它不會覆蓋警報......所以很奇怪 – dizda 2013-01-20 23:12:46

+0

我看了那個頁面,並且知道錯在哪裏。該頁面使用_iframe_標籤插入另一個DOM,這使得框架_window_是新的,它不是根窗口,所以window.alert函數不會覆蓋。 我已經做了一些研究,發現我們可以使用javascript來訪問子窗口對象window.document.getElementById('iframeid')。contentWindow。但我沒有找到禁用所有子窗口功能的方法。 如果您的HTML組件僅適用於一個站點,那麼您可以對該站點進行一些破解。 – 2013-03-05 07:21:02