2011-04-03 85 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