Blog / 阅读

flex导致浏览器对指定站点输入法无法输入中文的问题

by admin on 2014-04-28 13:25:55 in ,



主体环境
     flash player 11, ie8/ie9, mx控件(非s控件),xp系统,极点五笔

问题
    在html中设计div弹方框,并用swfobject方式加载swf,同时设置其params.wmode="opaque",此swf包括mx:Button, mx:Label, mx:Progressor, mx:Cavas, mx:Image, mx:HBox等,没有mx:Textfield.

    html页面中包括textarea。

    加载后,textarea无法输入中文了,无论怎么切换输入法都不可以。同时,访问当前浏览的网站的其他页面的textarea/input,也无法输入中文了。

主要原因
    flex的控件,都有设置内部的IME支持,默认情况下,这些控件应该是根据一定的系统初始化了IME的设置(暂时无法取证),而且IME的生效与控件的focus相关。所以当浏览器访问flex的控件时,会触发了IME的设置,并把浏览器当前站点的IME设置给屏蔽掉。

测试及验证
    案例1:更换输入法 为sougo中文输入法

    结果1:问题继续呈现,证明与输入法的安装及环境无关


    案例2:更换浏览器 为chrome, firefox, 360(IE),ie7, ie8, ie9
    结果2:chrome(33.+版本), firefox(27.+版本)问题不再呈现,360(IE),ie8,ie9,ie7出现,可见这种现在发生在IE上

    案例3:将wmode设置为"window", "transparent","opaque"
    结果3:window模式问题不再呈现,而opaque, transparent则会发生此问题

    案例4:测试是在flash加载后产生,还是在控件focus后产生(以button为代表)
    结果4:flash加载,不触发任何控件的聚焦,则不会发生;反而一旦触发了某个控件的focus事件,则产生问题。

    案例5:测试各种控件的发生情况,button,label,image,textfield等
    结果5:基本的文字控件(button, textfield, date等)都会,combox, image, label则不会

解决方案
    方案1: 一般情况下,flex应该遵循外部的IME设置,可以在初始化整个flex窗体的时候,全部设置: 


[plain] view plaincopy
focusManager.mx_internal::IMEEnabled = false;  
    参考: https://issues.apache.org/jira/browse/FLEX-33144

    方案2:利用flash.system.Capabilities设置窗体的roll out 事件:


[plain] view plaincopy
addEventListener(MouseEvent.ROLL_OUT, function(e:Event):void{  
    if(Capabilities.hasIME){    
      try{    
        if(!IME.enabled){IME.enabled=true;}   
        IME.conversionMode="CHINESE";  
      }catch(e:Error){ }   
    }    
});<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>  
     参考:http://zyn010101.iteye.com/blog/1115295

     方案3:除非有样式要求,否则直接使用wmode="window"方式。

     其他方案,可参考 http://hi.baidu.com/jackflit/item/59725b9a14c7908a581461a0 (没有试过)


写评论

相关文章

上一篇:解决php curl显示乱码 utf-8为gb2312

下一篇:jQuery源码 框架分析

评论

写评论

* 必填.

分享

栏目

赞助商


热门文章

Tag 云