struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pierre Henry (JIRA)" <j...@apache.org>
Subject [jira] [Created] (WW-4532) Javascript generated by s:doubleselect has global variables that can interfer with the rest of the app
Date Tue, 28 Jul 2015 09:45:05 GMT
Pierre Henry created WW-4532:
--------------------------------

             Summary: Javascript generated by s:doubleselect has global variables that can
interfer with the rest of the app
                 Key: WW-4532
                 URL: https://issues.apache.org/jira/browse/WW-4532
             Project: Struts 2
          Issue Type: Bug
          Components: Plugin - Tags
    Affects Versions: 2.3.20
            Reporter: Pierre Henry


In the JavaScript code generated by the {{s:doubleselect}} tag (and, possibly other tags),
there are for loops using the following format :

{code}
for (m = ObservationForm_observation_countryKeyTemp.options.length - 1; m >= 0; m--) {
            ObservationForm_observation_countryKeyTemp.options[m] = null; {code}

The variable {{m}} is never defined before that. So this creates a globally scoped {{m}} variable
that can interfere with other JavaScript code.

In my case it interfered with library code that is processed with a minifyer (I think in this
case it is Google Closure Compiler) and contains a lot of one-letter variable name, such as...
{{m}}.

So I got the following error :

{code}
Uncaught TypeError: number is not a function
{code}

Which was difficult to trace since the code was minified. If the code was not minified, then
the error did not happen any more.

I believe it would be enough to just use the var keyword in the loop definition to remove
this problem :

{code}
for (var m = ObservationForm_observation_countryKeyTemp.options.length - 1; m >= 0; m--)
{
            ObservationForm_observation_countryKeyTemp.options[m] = null; {code}





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message