none
Chamar javascript encapsulado .js dentro de outro javascript encapsulado RRS feed

  • Pergunta

  • Prezados colegas,

    Tenho uma função javascript encapsulada num expirar.js, ao qual com 2 min. faz a pag. expirar,  ao final do tempo configurado de 1 minuto lança um aviso na tela se o usuário deseja resetar o tempo, ou se deseja sair

    o conteúdo

    var sess_pollInterval = 6000;
    var sess_expirationMinutes = 2;
    var sess_warningMinutes = 1;
    var sess_intervalID;
    var sess_lastActivity;
    
    function initSession() {
        sess_lastActivity = new Date();
        sessSetInterval();
        $(document).bind('keypress.session', function (ed, e) {
            sessKeyPressed(ed, e);
        });
    }
    
    function sessSetInterval() {
        sess_intervalID = setInterval('sessInterval()', sess_pollInterval);
    }
    
    function sessClearInterval() {
        clearInterval(sess_intervalID);
    }
    
    function sessKeyPressed(ed, e) {
        sess_lastActivity = new Date();
    }
    
    function sessLogOut() {
        window.location.href = 'Logout.aspx';
    }
    
    function sessInterval() {
        var now = new Date();
        //get milliseconds of differneces 
        var diff = now - sess_lastActivity;
        //get minutes between differences
        var diffMins = (diff / 1000 / 60);
    
        if (diffMins >= sess_warningMinutes) {
            //wran before expiring
            //stop the timer
            sessClearInterval();
            //promt for attention
            var active = confirm('Your session will expire in ' + (sess_expirationMinutes - sess_warningMinutes) +
                    ' minutes (as of ' + now.toTimeString() + '), press OK to remain logged in ' +
                    'or press Cancel to log off. \nIf you are logged off any changes will be lost.');
            if (active == true) {
                now = new Date();
                diff = now - sess_lastActivity;
                diffMins = (diff / 1000 / 60);
    
                if (diffMins > sess_expirationMinutes) {
                    sessLogOut();
                }
                else {
                    initSession();
                    sessSetInterval();
                    sess_lastActivity = new Date();
                }
            }
            else {
                sessLogOut();
            }
        }
    }

    E ao mesmo tempo, eu tenho outro .js encapsulado, o defaultCountdown.js - ele é apenas um cronometro decrescente.

    O que quero fazer é chamar o defaultCountdown.js dentro do expirar.js, por exemplo, no javascrip acima, nesse condicional:

                else {
                    initSession();
                    sessSetInterval();
                    sess_lastActivity = new Date();
                }

    Gostaria de inserir o chamado ao defaultCountdown.js de forma que ele reiniciaria o cronometro, como se houvesse um refresh na página, mas no caso seria uma refresh apenas nessa função javascript.

    Para conhecerem o defaultCountdown.js:

    $(function () {
        shortly = new Date();
        shortly.setSeconds(shortly.getSeconds() + 28800);
        //since: new Date(2011, 12-1, 11),
        $('#defaultCountdown').countdown({ until: shortly,
            onExpiry: TempoAcabou, onTick: watchCountdown, onTick: highlightLast5, format: 'MS'
        });
    
        function highlightLast5(periods) {
            if ($.countdown.periodsToSeconds(periods) == 600) {
                $(this).addClass('highlight');
            }
        }
    
        function TempoAcabou() {
    
            $('#mensagem').text("Para sua segurança o tempo de duração da página expirou, favor logar novamente");
            $('#mensagem').css('visibility', 'visible');
        }
    
        function watchCountdown(periods) {
            $('#monitor').text('Just ' + periods[5] + ' minutes');
        }
    });

    Ambas são chamadas na minha página via seus encapsulamentos:

        <script src="Script/defaultCountdown.js" charset="ISO-8859-1" type="text/javascript"></script>
    
        <script src="Script/expirar.js" type="text/javascript"></script>

    Como são dois javascripts diferentes, gostaria de vincular um ao outro, pois se o usuário clicar em ok (isso ocorre dentro daquele "else" que citei acima) quanto alert que o expirar.js, a contagem de tempo interna para fazer a página expirar reinicia, porém o cronometro foi feito à parte, e quero vincular que sempre que o usuário clicar em ok para resetar o tempo do expirar, chamar novamente o defaultcountdown, de forma que sua contagem também reiniciará (pois essa contagem é apenas externa para o usuário ver, a contagem do expirar é interna sem transparência, por isso juntei as duas coisas e quero fazê-las funcionar juntas).

    Então em suma, naquele else mencionado acima, quero que chame o cronometro defaultcountdown novamente, como se tivesse sido um postback somente nele, mas mediante o condicional do else do expirar.js.

    Não sei como chamar uma função javascript externa já encapsulada, em outra função javascript que também é encapsulada num arquivo, as duas separadas.

    Desde já obrigado

    sexta-feira, 24 de outubro de 2014 16:55

Respostas

  • Caso tenha conseguido a solução finalize sua Thread marcando a resposta

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    • Marcado como Resposta Marcos SJ sexta-feira, 2 de outubro de 2015 18:30
    domingo, 28 de junho de 2015 15:12

Todas as Respostas

  • Dentro de seu primeiro arquivo JS você pode chamar:

    (function() {
       var script = document.createElement('script');
       script.type = 'text/javascript';
       script.src = 'arquivo-2.js';
       
       document.getElementsByTagName('head')[0].appendChild(script);
     })();

    Se te ajudou marca como resposta
    • Sugerido como Resposta Mr. GMSOFT sexta-feira, 24 de outubro de 2014 17:08
    • Não Sugerido como Resposta Angelo.Net sexta-feira, 24 de outubro de 2014 18:45
    • Sugerido como Resposta Mr. GMSOFT segunda-feira, 27 de outubro de 2014 20:09
    sexta-feira, 24 de outubro de 2014 17:08
  • Olá Mr. GMSOFT, muito obrigado, testei aqui e pelo F12 vi que realmente foi chamado o defaultcountdown.js novamente, mas não agiu como eu esperava, realmente vai ser preciso um postback, pra resetar o tempo do cronometro, posso aproveitar mais um pouco do seu conhecimento?

    Dentro daquele else do expirar.js:

                else {
                    initSession();
                    sessSetInterval();
                    sess_lastActivity = new Date();
                }

    eu quero forçar um postback no div que chama o defaultCountdown.js:

            <div id="defaultCountdown" runat="server" 
                style="z-index: 101;width:100px;height: 27.4px; top:1px; left:184px; ;"></div>

    Teria que colocar dentro de um updatepanel? (mas o que quero é forçar um postback somente neste div do defaulCOuntdown, não no resto da página)

    Pois não quero um postback na página inteira, quero resetar apenas o chamado do defaultCountdown.js, mas colocando um update panel, como fazer ele ser ativado por aquele else do expirar.js citado acima?

    Abraço! obrigado


    • Editado Angelo.Net sexta-feira, 24 de outubro de 2014 19:29
    sexta-feira, 24 de outubro de 2014 17:58
  • Por que não cria uma function para zerar o temporizador?
    segunda-feira, 27 de outubro de 2014 20:09
  • Caso tenha conseguido a solução finalize sua Thread marcando a resposta

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    • Marcado como Resposta Marcos SJ sexta-feira, 2 de outubro de 2015 18:30
    domingo, 28 de junho de 2015 15:12