TWaver - 专注UI技术

http://twaver.servasoft.com/
posts - 171, comments - 191, trackbacks - 0, articles - 2
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

有好多同学问当浏览器关闭时, Flex如何能得到通知, 提醒用户保存数据. 这是个很普遍的问题, 下面就演示一下如何做.

Flex无法知道浏览器何时关闭, 但javascript可以(window.onbeforeunload), 所以思路就是:
1. Flex提供方法, 能让javascript调用, 以便在浏览器关闭时, 判断是否有数据需要保存, 如果有, 就提示, 没有就啥都不干<?xml version="1.0" encoding="utf-8"?>

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal"
                xmlns:tw
="http://www.servasoftware.com/2009/twaver/flex"
                creationComplete
="init();" paddingBottom="0" paddingLeft="0" paddingRight="0" paddingTop="0">
    
<mx:Script>
        
<![CDATA[
            
import mx.controls.Alert;

            
import twaver.*;
            
import twaver.network.interaction.InteractionEvent;

            
private var box:ElementBox = new ElementBox();

            
private function init():void {
                
this.initBox();
                
// Add callback, javascript use it to check whether popup message when browser is closing
                ExternalInterface.addCallback("needSave", needSave);
                
// Enable save location button once location changed
                network.addInteractionListener(function(e:InteractionEvent):void {
                    
if(InteractionEvent.LAZY_MOVE_END == e.kind
                            
|| InteractionEvent.LIVE_MOVE_END == e.kind) {
                        
if(!btnSave.enabled){
                            btnSave.enabled 
= true;
                        }
                    }
                });
            }

            
private function initBox():void {
                var from:Node 
= new Node();
                from.name 
= "From";
                from.location 
= new Point(100200);
                box.add(from);

                var to:Node 
= new Node();
                to.name 
= "To";
                to.location 
= new Point(400500);
                box.add(to);

                box.add(
new Link(from, to));
                
this.network.elementBox = box;
            }

            
private function save():void {
                saveData();
                btnSave.enabled 
= false;
            }

            
private function saveData():void {
                Alert.show(
"Data saved");
            }

            
public function needSave():Boolean {
                
return btnSave.enabled;
            }
        ]]
>
    
</mx:Script>
    
<mx:VBox width="100%" height="100%">
        
<mx:HBox width="100%">
            
<mx:Button id="btnSave" label="Save Location" click="save()" enabled="false"/>
        
</mx:HBox>
        
<tw:Network id="network" width="100%" height="100%"/>
    
</mx:VBox>
</mx:Application>

 

 2. html页面添加window.onbeforeunload事件, 判断如果Flex有内容要保存, 就弹出提示:
<script>
    window.onbeforeunload = function (evt) {
        var demo = document.demo || window.demo;
        if (demo.needSave()) {
            var message = 'You did not save your data. Do you really want to quit?';
            if (!evt) {
                evt = window.event;
            }
            if (evt) {
                evt.returnValue = message;
            }
            return message;
        }
    }
</script>
完整代码见附件:TestWindowClose

评论

# re: 浏览器关闭时, 如何提醒用户保存Flex上的拓扑数据  回复  更多评论   

2012-03-01 09:17 by 弹弓
楼主不是用的360浏览器吧

# re: 浏览器关闭时, 如何提醒用户保存Flex上的拓扑数据  回复  更多评论   

2012-03-01 09:51 by 我是看评论的
楼上的, 我笑了, 明明是safari, 怎么成360了

只有注册用户登录后才能发表评论。


网站导航: