javascript code is giving error

2

I posted a thread here that dealt with how to replace an ASP code with Javascript cleaner. Well, I had a lot of help from Maicon and TobyMosque. Well, I made the changes, to my understanding and gives an error that I could not eliminate. See below the ASP code with mixed JS to be replaced:

function selecionar(num_seq_proposta_ts, num_proposta, nome_titular){
    var txt_chamada = '';
    try {
        var oMyObject = window.dialogArguments;
        txt_chamada = "oMyObject";
        var aux = oMyObject.document;
    } 
    catch (e){
        txt_chamada = "window.parent.opener";
    }   
    var txt_prefixo = '';
    var txt_sufixo  = '';

    //Somente joga o valor para o campo se ele existir
    <%if trim(nome_campo_cod_ts)<> "" then%>
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            <%if trim(ind_tipo_proposta_pj) = "S" then%>
                var onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);
            <%else%>
                var onum_seq_proposta_ts    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);    
            <%end if%>
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            <%if ind_tipo_proposta_pj = "S" then%>
                var onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);
            <%else%>
                var onum_seq_proposta_ts    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);
            <%end if%>
        }
    <% else %>
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            <%if ind_tipo_proposta_pj = "S" then%>
                var onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_seq_proposta_pj_ts' + txt_sufixo);
            <%else%>
                var onum_seq_proposta_ts    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_seq_proposta_ts' + txt_sufixo);
            <%end if%>
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            <%if ind_tipo_proposta_pj = "S" then%>
                var onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_seq_proposta_pj_ts' + txt_sufixo);
            <%else%>
                var onum_seq_proposta_ts    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_seq_proposta_ts' + txt_sufixo);
            <%end if%>
        }
    <%end if%>  

    <%if trim(ind_tipo_proposta_pj) = "S" then%>
        if (onum_seq_proposta_pj_ts != null ) {
            onum_seq_proposta_pj_ts.value = num_seq_proposta_ts;
        }
    <%else%>
        if (onum_seq_proposta_ts != null ) {
            onum_seq_proposta_ts.value = num_seq_proposta_ts;
        }
    <%end if %>

    <%if trim(nome_campo_tit)<>"" then%>
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            var onum_proposta   = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_tit%>' + txt_sufixo);
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            var onum_proposta   = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_tit%>' + txt_sufixo);
        }
    <%else %>
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            <%if ind_tipo_proposta_pj = "S" then%>
                var onum_proposta_pj    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_proposta_pj' + txt_sufixo);
            <%else%>
                var onum_proposta   = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_proposta' + txt_sufixo);
            <%end if%>          
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            <%if ind_tipo_proposta_pj = "S" then%>
                var onum_proposta_pj    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_proposta_pj' + txt_sufixo);
            <%else%>
                var onum_proposta   = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_proposta' + txt_sufixo);
            <%end if%>  
        }
    <%end if %>

    <%if trim(ind_tipo_proposta_pj) = "S" then%>
        if (onum_proposta_pj != null ) {
            onum_proposta_pj.value = num_proposta;
            <%if indOrigem = "J" then%>
                onum_proposta_pj.onchange();
            <%end if%>
        }
    <%else%>
        if (onum_proposta != null ) {
            onum_proposta.value = num_proposta;
            <%if indOrigem = "J" then%>
                onum_proposta.onchange();
            <%end if%>
        }
    <%end if%>

    <%if trim(nome_campo_prop)<>"" then%>
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            var onome_titular   = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_prop%>' + txt_sufixo);
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            var onome_titular   = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_prop%>' + txt_sufixo);
        }
    <% else %>
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            var onome_titular   = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>nome_titular' + txt_sufixo);
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            var onome_titular   = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>nome_titular' + txt_sufixo);
        }
    <% end if %>

    if (onome_titular != null )
        onome_titular.value = stringReplace(nome_titular, "|*|", "'");


    <%if trim(funcao_executar) <> "" then%>
        try{
            var aux = eval(txt_chamada + ".<%Response.Write funcao_executar%>");                
        }catch(e){
            window.returnValue = 'window.<%Response.Write funcao_executar%>';           
        }
    <%end if%>

    <% if ucase(indsubmit) = "TRUE" then %>
        eval(txt_chamada + ".document.form01.submit()");
    <%end if%>
    parent.self.close();
}

This is the code I've made. Mr TobyMosque suggested an approach to me, to avoid eval but could not do it, it was an error. I left eval , try to make it work first and then try to improve the code. Here's what I did:

    var asp = {};
    Object.defineProperty(asp, "ind_tipo_proposta_pj", { value: "<%= ind_tipo_proposta_pj %>", writable: false, enumerable: true, configurable: true });
    Object.defineProperty(asp, "prefixo", { value: "<%= prefixo %>", writable: false, enumerable: true, configurable: true });
    Object.defineProperty(asp, "nome_campo_cod_ts", { value: "<%= nome_campo_cod_ts %>", writable: false, enumerable: true, configurable: true });
    Object.defineProperty(asp, "nome_campo_tit", { value: "<%= nome_campo_tit %>", writable: false, enumerable: true, configurable: true });
    Object.defineProperty(asp, "indOrigem", { value: "<%= indOrigem %>", writable: false, enumerable: true, configurable: true });
    Object.defineProperty(asp, "nome_campo_prop", { value: "<%= nome_campo_prop %>", writable: false, enumerable: true, configurable: true });
    Object.defineProperty(asp, "funcao_executar", { value: "<%= funcao_executar %>", writable: false, enumerable: true, configurable: true });

//------------------------------------------------------------------------   
function selecionar(num_seq_proposta_ts, num_proposta, nome_titular){
    //Adequação para chamada modal dentro do chrome
    var txt_prefixo = '';
    var txt_sufixo  = '';
    var txt_chamada = "";
    var onome_titular = '';
    var janela = null;

    if (window.dialogArguments) {
        janela = window.dialogArguments;
        txt_prefixo = '.document.form01.';
        txt_sufixo  = '';
    } else if (window.parent.opener) {
        janela = window.parent.opener;
        txt_prefixo = '.document.all[\'';
        txt_sufixo  = '\']';
    } else {
        janela = window.parent.dialogArguments;
        txt_prefixo = '.document.form01.';
        txt_sufixo  = '';
    }

    if (janela) {
        var form01 = null;

        if (janela.document) {
            form01 = janela.document.form01;
        }
        else {
            form01 = janela.elements;
        }

        var onum_seq_proposta_pj_ts = null;
        var onum_seq_proposta_ts = null;
        var onum_proposta = null;
        var onum_proposta_pj = null;

        var nome_campo_cod_ts_id = "<%= trim(nome_campo_cod_ts) %>";
        var onum_seq_proposta_pj_ts_id = "<%= trim(ind_tipo_proposta_pj)%>" == "S";

        window["objeto"] = null;

        if(nome_campo_cod_ts_id != ""){
            if(asp.ind_tipo_proposta_pj == "S")
                onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_cod_ts + txt_sufixo);
            else
                onum_seq_proposta_ts = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_cod_ts + txt_sufixo);
        }
        else
        {
            if(asp.ind_tipo_proposta_pj == "S")
                onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + asp.prefixo + num_seq_proposta_pj_ts + txt_sufixo);
            else
                onum_seq_proposta_ts = eval(txt_chamada + txt_prefixo + asp.prefixo + num_seq_proposta_ts + txt_sufixo);
        }

        if (asp.ind_tipo_proposta_pj == "S"){
            if (onum_seq_proposta_pj_ts != null ) {
                onum_seq_proposta_pj_ts.value = num_seq_proposta_ts;
            }
        }
        else
        {
            if (onum_seq_proposta_ts != null ) {
                onum_seq_proposta_ts.value = num_seq_proposta_ts;
            }
        }

        if(nome_campo_tit != ""){
            onum_proposta = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
        }
        else
        {
            if(asp.ind_tipo_proposta_pj == "S")
            {
                onum_proposta_pj = eval(txt_chamada + txt_prefixo + asp.prefixo + num_proposta_pj + txt_sufixo);
            }
            else
            {
                onum_proposta = eval(txt_chamada + txt_prefixo + asp.prefixo + num_proposta + txt_sufixo);
            }
        }

        if (asp.ind_tipo_proposta_pj == "S"){
            if (onum_proposta_pj != null ) {
                onum_proposta_pj.value = num_proposta;
                if(asp.indOrigem == "j")
                {
                    onum_proposta_pj.onchange();
                }
            }
        }
        else
        {
            if (onum_proposta_pj != null ) {
                onum_proposta.value = num_proposta;
                if(asp.indOrigem == "j")
                {
                    onum_proposta.onchange();
                }
            }
        }

        if(asp.nome_campo_prop != "")
        {
            onome_titular   = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_prop + txt_sufixo);
        }
        else
        {
            onome_titular   = eval(txt_chamada + txt_prefixo + asp.prefixo + nome_titular + txt_sufixo);
        }

        if (onome_titular != null )
            onome_titular.value = stringReplace(nome_titular, "|*|", "'");

        if (funcao_executar != "")
        {
            if (window.dialogArguments || window.parent.dialogArguments) {
                var aux = eval(txt_chamada + "." + asp.funcao_executar);
            }
            else
            {
                window.returnValue = "window." + asp.funcao_executar;
            }

        }

    }//Fim janela

    try
    {
        window.parent.dialogWindow.close();
    }
    catch (e) {
        parent.self.close();
    }

    //<% if ucase(indsubmit) = "TRUE" then %>
    //  eval(txt_chamada + ".document.form01.submit()");
    //<%end if%>
    //parent.self.close();
}

This is the error you are giving:

  

Uncaught SyntaxError: Unexpected token.

This is what the debug brought in this error

  

.document.form01.3753742

The number is the registration number of a person that the search returns. What's wrong?

You have failed to load var txt_chamada :

if (window.dialogArguments) {
        janela = window.dialogArguments;
        txt_chamada = 'window.dialogArguments';
        txt_prefixo = '.document.form01.';
        txt_sufixo  = '';
    } else if (window.parent.opener) {
        janela = window.parent.opener;
        txt_chamada = 'window.parent.opener';
        txt_prefixo = '.document.all[\'';
        txt_sufixo  = '\']';
    } else {
        janela = window.parent.dialogArguments;
        txt_chamada = 'window.parent.dialogArguments';
        txt_prefixo = '.document.form01.';
        txt_sufixo  = '';
    }

Now the error is this:

  

Uncaught SyntaxError: Unexpected number

TobyMosque, let me clarify something here. This call:

if (asp.nome_campo_tit) {}
    try {
        txt_prefixo = '.document.form01.';
        txt_sufixo  = '';
        var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
    } catch (e) {
        txt_prefixo = '.document.all[\'';
        txt_sufixo  = '\']';
        var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
    }
}

With this call the form does not open Modal in Chrome. It was necessary to do this:

if (window.dialogArguments) {
            janela = window.dialogArguments;
        } else if (window.parent.opener) {
            janela = window.parent.opener;
        } else {
            var janela = window.parent.dialogArguments;
        }

Soon I will make this change, to suit my need. Our trick here is just the form or frame opening in Modal form in Chrome. This happens only in IE.

I made this change and resolved. Thanks to Toby and Maicon.

function selecionar(num_seq_proposta_ts, num_proposta, nome_titular) {
        var janela = window.dialogArguments || window.parent.opener || window.parent.dialogArguments;

        if (janela) {
            var form01 = null;
            if (janela.document) {
                form01 = janela.document.form01;
            }
            else {
                form01 = janela.elements;
            }
            var container = form01 || janela.document.all;

            var onum_seq_proposta_ts = container[asp.prefixo + asp.nome_campo_cod_ts];
            var onum_proposta = container[asp.prefixo + asp.nome_campo_tit];
            var onome_titular = container[asp.prefixo + asp.nome_campo_prop]

            if (onum_seq_proposta_ts != null) {
                onum_seq_proposta_ts.value = num_seq_proposta_ts;
            }
            if (onum_proposta != null) {
                onum_proposta.value = num_proposta;
                if (asp.indOrigem === "J") {
                    onum_proposta.onchange();
                }
            }
            if (onome_titular != null) {
                onome_titular.value = stringReplace(nome_titular, "|*|", "'");
            }

            var aux = null;
            if (asp.funcao_executar) {
                if (janela[asp.funcao_executar]) {
                    aux = janela[asp.funcao_executar]();
                } else if (window[asp.funcao_executar]) {
                    window.returnValue = window[asp.funcao_executar]()
                }
            }
        }

        try {
            window.parent.dialogWindow.close();
        }
        catch (e) {
            parent.self.close();
        }

        //if (asp.indsubmit && janela.document.form01) {
        //    janela.document.form01.submit();
        //}
        parent.self.close();
    }
    
asked by anonymous 18.08.2015 / 19:46

1 answer

3

pnet, I think you did not quite understand my suggestion, I'll post here a prototype of your code with the proposed changes:

.asp file

<script type="text/javascript">
    var asp = {};
    asp.ind_tipo_proposta_pj = "<%= trim(ind_tipo_proposta_pj) %>";
    asp.indOrigem = "<%= trim(indOrigem) %>";

    asp.complemento = asp.ind_tipo_proposta_pj === "S" ? "_pj" : "";    
    asp.prefixo = "<%= trim(prefixo) %>";
    asp.nome_campo_cod_ts = "<%= trim(nome_campo_cod_ts) %>" || "num_seq_proposta" + asp.complemento + "_ts";
    asp.nome_campo_tit = "<%= trim(nome_campo_tit) %>" || "num_proposta" + asp.complemento;
    asp.nome_campo_prop = "<%= trim(nome_campo_prop) %>" || "nome_titular";
    asp.funcao_executar = "<%= trim(funcao_executar) %>";
    asp.indsubmit = "<%= trim(ucase(indsubmit)) %>" === "TRUE";
</script>

file.js

function selecionar(num_seq_proposta_ts, num_proposta, nome_titular){    
    var janela = window.dialogArguments || window.parent.opener;    
    var container = janela.document.form1 || janela.document.all;   

    var onum_seq_proposta_ts = container[asp.prefixo + asp.nome_campo_cod_ts];
    var onum_proposta = container[asp.prefixo + asp.nome_campo_tit];
    var onome_titular = container[asp.prefixo + asp.nome_campo_prop]

    if (onum_seq_proposta_ts != null ) {
        onum_seq_proposta_ts.value = num_seq_proposta_ts;
    }
    if (onum_proposta != null ) {
        onum_proposta.value = num_proposta;
        if (indOrigem === "J") {
            onum_proposta.onchange();
        }
    }
    if (onome_titular != null ) {
        onome_titular.value = stringReplace(nome_titular, "|*|", "'");
    }

    var aux = null;
    if (asp.funcao_executar) {
        if (typeof janela[asp.funcao_executar] === "function") {
            aux = janela[asp.funcao_executar]();
        } else if(typeof window[asp.funcao_executar] === "function") {
            window.returnValue = window[asp.funcao_executar]()
        }
    }

    if (asp.indsubmit && janela.document.form1) {}
        janela.document.form1.submit();
    }
    parent.self.close();
}

Explanations

In my opinion, the most important thing is to try to decouple the script as much as possible from the asp page, as well as avoid code repetition and finally remove the use of exceptions as flow control.

To try to achieve these goals, I made some decisions, starting by dividing script into 3 parts:

  • declarations of variables coming from the server that will be used in the script in arquivo.asp .
  • declaration of local and global variables no longer arquivo.js .
  • body of the algorithm.
  • Then at first I searched for and listed all the ASP ( <% valor %> ) tags in the script and moved them to the asp page header, for example, the following code snippet:

    <%if trim(nome_campo_tit)<>"" then%>
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            var onum_proposta   = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_tit%>' + txt_sufixo);
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            var onum_proposta   = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_tit%>' + txt_sufixo);
        }
    <%else %>
    

    We move the statements ASP <%Response.Write prefixo%> , <%Response.Write nome_campo_tit%> to the page header

    <script type="text/javascript">
        var asp = {};
        ...   
        asp.prefixo = "<%= trim(prefixo) %>";
        asp.nome_campo_cod_ts = "<%= trim(nome_campo_cod_ts) %>";
        ...
    </script>
    

    and the script looks like this:

    if (asp.nome_campo_tit) {}
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
        }
    }
    

    After analyzing the try-catch blocks being used to control the script flow, then the try was replaced with a if that verifies that the condition causing the error will not happen and the catch by else , let's take the following block as an example:

    try {
        var oMyObject = window.dialogArguments;
        txt_chamada = "oMyObject";
        var aux = oMyObject.document;
    } 
    catch (e){
        txt_chamada = "window.parent.opener";
    }
    

    The error that can happen here is to access a property of window.dialogArguments when it is undefined , as if(undefined) is evaluated as false, we can do the following:

    if (window.dialogArguments) {
        var oMyObject = window.dialogArguments;
        txt_chamada = "oMyObject";
    } else {
        txt_chamada = "window.parent.opener";
    }
    

    Note that we removed aux because its only use was to cause the error.

    Now let's check the conditions, let's get a if to study:

    if (asp.nome_campo_tit) {}
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
        }
    } else {
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + "nome_titular" + txt_sufixo);
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + "nome_titular" + txt_sufixo);
        }
    }
    

    What changes in the block from if to else , is that if asp.nome_campo_tit is equal to empty, the script uses a default value, in case "title_name", then why not make else with variable asp.nome_campo_tit ? For this we will update the page header:

    <script type="text/javascript">
        var asp = {};
        ...   
        asp.nome_campo_cod_ts = "<%= trim(nome_campo_cod_ts) %>";
        ...
    </script>
    

    looks like this:

    <script type="text/javascript">
        var asp = {};
        ...   
        asp.nome_campo_cod_ts = "<%= trim(nome_campo_cod_ts) %>" || "nome_titular";
        ...
    </script>
    

    this is possible because the default value of a type is evaluated as false in a comparison, then if ("") results in false , as var str = "" || "alt" will result in str = "alt" , var str = "teste" || "alt" in str = "exemplo" , thus asp.nome_campo_tit will always have a value, and we can simplify script :

    try {
        txt_prefixo = '.document.form01.';
        txt_sufixo  = '';
        var onum_proposta = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
    } catch (e) {
        txt_prefixo = '.document.all[\'';
        txt_sufixo  = '\']';
        var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
    }
    

    We still have the problem of eval , but to solve we need to understand what the variables txt_chamada , txt_prefixo and txt_sufixo do ...

    txt_chamada contains the reference to the window containing input :

    var txt_chamada = "";
    if (window.dialogArguments) {
        var oMyObject = window.dialogArguments;
        txt_chamada = "oMyObject";
    } else {
        txt_chamada = "window.parent.opener";
    }
    

    Instead of storing the text to mount a script to be executed by eval() , let's store the window itself:

    var janela = window.dialogArguments || window.parent.opener;
    

    Note that if janela gets window.parent.opener only if window.dialogArguments is undefined

    txt_prefixo gets the txt_chamada + ".document.form1" belonging to our window, if form1 is undefined it will use txt_chamada + ".document.all" .

    try {
        txt_prefixo = '.document.form01.';
        txt_sufixo  = '';
        var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
    } catch (e) {
        txt_prefixo = '.document.all[\'';
        txt_sufixo  = '\']';
        var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
    }
    

    Note that it again uses a try-catch block to set flow control, the error here occurs when script tries to access a form1 property when it does not exist, so we can simplify it to the following:

    var container = janela.document.form1 || janela.document.all;
    

    txt_sufixo receives the closing of a parenthesis, if txt_prefiro opens one, since we will not access the properties of containe r through eval() , it is unnecessary.

    It is worth remembering that I can access the input of container , regardless of whether it receives form1 and all through the name of input as follows: container[nome_input] , thus the line below: / p>

    var onum_proposta   = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_tit + txt_sufixo);
    

    is equivalent to the following:

    var onum_proposta   = container[asp.prefixo + asp.nome_campo_tit];
    

    Finally, some security checks before calling any function with dynamic name:

    if (typeof janela[asp.funcao_executar] === "function") { 
        janela[asp.funcao_executar]();
    }
    

    It is necessary to do this, because if janela[asp.funcao_executar] has an assigned value and is not a function, this will throw an exception.

    Notes

    As in% w / o script always accesses the variable from eval() , then it will always use a global variable, so in this case window will equal eval(variavel) .

    Normally, I use the window[variavel] comparer to ensure that the types are equal, for example === returns "1" == 1 , while true returns "1" === 1 , because although false is equal to value: "1" , value: 1 is different from type: string .

    If you have any questions, feel free to ask.

        
    18.08.2015 / 21:34