728x90

현재 프로젝트에서 UINexacro 기반으로 진행중이고 지도는 순수 Web, Jquery 모듈도 사용해야하는데..

알아보니 Nexacro 컴포넌트중에 WebBrowser 를 사용하여 웹과 데이터를 주고 받고 함수 호출까지 가이드가 있다고 하니 사용해 보았다.

설명하기에 앞서 넥사크로와 웹 데이터 송수신이라고 하니 좀 거창해보이지만 알고나면 별거 없다.

넥사크로 가이드에 따라하기가 힘들뿐...

 

내가 개발하고했던 데이터 흐름은 아래 그림과 같았다.

 

대략 소스기반으로 설명 하자면........

 

 

Nexacro(팝업창) 기준으로 더 설명하면........... 

 

UI 구조

구현된 UI

 

 

소스는 첨부하지 못하고 구현시 필요한 소스만 공유한다.

 

 

Nexacro.xfdl 

 

this.wbRouto_onusernotify = function(obj:nexacro.WebBrowser,e:nexacro.WebUserNotifyEventInfo)
{
    if(e.userdata){
        
        var params = {};
        
        switch(e.userdata.type){
            case 1: case 3: case 5:
                console.log("1번");
            break;
                    
            case 'initParam':
                params.wbFn = 'fnSetInitMap';
                params.fnParams = {};
                params.fnParams.LAT  = this.gfnGetArgument('LAT');
                params.fnParams.LON  = this.gfnGetArgument('LON');
                params.fnParams.ADDR = this.gfnGetArgument('ADDR');
                params.fnParams.BTNS = this.gfnGetArgument('BTNS');
                this.wbCallMethod( params );
            break;
            default:
                console.log("3번");
            break;
        }
    }
};

this.wbCallMethod = function( obj ){
    
    var wb = this.wbRouto.getProperty("window");
        wb.callMethod(obj.wbFn, obj.fnParams);
    
    if(wb){
        wb.destroy();
        wb = null;
    }    
};

 

 

Web.html 

 

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <meta charset="UTF-8">
    <meta name="viewport" content="user-scalable=1, initial-scale=0.1, width=device-width, target-densitydpi=device-dpi">
    <title>DEMO</title>
</head>
<body>
    웹 화면입니다.
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="js/com/initialize.js"></script>
</body>
</html>

 

initialize.js 

    //--------------------------------------------------------------------------------------------------------
    if (!window.NEXACROHTML){
        window.NEXACROHTML = {};
    }
    
    window.NEXACROHTML.FireUserNotify = function(userdata){    
            
        if (window.NEXACROWEBBROWSER){
            window.NEXACROWEBBROWSER.on_fire_onusernotify(window.NEXACROWEBBROWSER, userdata);
        }else{
            window.document.title = userdata;
        }
    }
    
    window.NEXACROHTML.Init = function() {
        var cnt = 0;
        var interval = setInterval(function() {            
            
            if(cnt >= 10 || window.NEXACROWEBBROWSER) {
                clearInterval(interval);
                fnInit();
              }
            cnt++;
        }, 100);
    }    
    //--------------------------------------------------------------------------------------------------------
    
    /**
     * @description Nexa -> Web 
     *              넥사로부터 설정파일을 불러온다.
     */          
    function fnSetInitMap( obj ){

        if(obj){
            REQ_INIT_LAT  = parseFloat(obj.LAT);
            REQ_INIT_LON  = parseFloat(obj.LON);            
            REQ_INIT_ADDR = obj.ADDR;
            REQ_BTNS      = obj.BTNS;
            
            // 프로젝트 로직 구현이 필요합니다. 
        }else{
            // 프로젝트 로직 구현이 필요합니다.
        }

    }
    
    /**
     * @description 초기함수 호출 ( Web -->> Nexa ) 
     */          
    function fnInit(){
        var params = {};
            params.type = 'initParam';
        
        if( window.NEXACROWEBBROWSER == undefined ){
            window.NEXACROHTML.Init();
            return;
        }else{
            // 프로젝트 로직 구현이 필요할 수 있습니다.
        }
        
        // 지도생성 전 파라미터 가져오기        
        window.NEXACROHTML.FireUserNotify( params );
    }
    
    $(function () {
        fnInit();
    });

 

 

이상 끝 ~~~~~~~~~~~~~

728x90
반응형

+ Recent posts