Pour travailler avec JavaScript dans des formulaires, il est important de déclarer les objets et les variables dans la plage à laquelle ils sont destinés. En général, le fait de déclarer inutilement des objets et des variables peut entraîner des problèmes de performances.
L’application de plage stricte a été introduite dans Designer 8.1 afin d’améliorer le temps d’exécution et l’utilisation de la mémoire d’un formulaire. Dans Designer, l’application de plage stricte est activée par défaut pour les nouveaux formulaires. Une option permet de l’activer pour les anciens formulaires.
Qu’est-ce qu’une plage dans JavaScript ?
Une plage fonctionne vers l’extérieur de manière à ce que tout ce qui se trouve entre accolades ({}) peut accéder à ce qui se trouve à l’extérieur. En revanche, tout ce qui se trouve à l’extérieur des accolades ne peut pas accéder à ce qui se trouve à l’intérieur.
Dans l’exemple qui suit, la première accolade ouvre la plage de fonction et la deuxième la ferme. Tout ce qui se trouve entre les accolades se situe dans la plage de « foo » ().
La plage de l’exemple suivant est valide car
var nFooVar = nOutsideVar
entre accolades peut accéder à
var nOutsideVar = 2
à l’extérieur des accolades.
En revanche, l’exemple suivant illustre une plage non valide car
var nOutsideVar = nFooVar
ne peut pas accéder à
var nFooVar =4
entre les accolades.
Une plage de création de script décrit des éléments de script pouvant accéder à d’autres éléments. Les éléments de script peuvent être des variables ou des fonctions.
Qu’est-ce qu’une plage XML ?
Dans la conception de formulaire, une plage concerne la hiérarchie. Par exemple, pour accéder au sous-formulaire
inside
de la source XML suivante, vous devez taper
outside.inside
.
<subform name="outside">
<subform name="inside">
…
</subform>
</subform>
Ne tapez pas
inside.outside
car vous devez d’abord accéder au sous-formulaire le plus à l’extérieur et progresser ensuite vers l’intérieur.
Expressions SOM et plage
Dans les formulaires destinés à Acrobat ou Adobe Reader 8.1, les expressions SOM comportent des plages correctes comme indiqué dans cet exemple :
<subform name="a">
<subform name="b"/>
Dans les formulaires destinés à Acrobat ou Adobe Reader 8.0, l’expression SOM
a.b.a
renvoie le sous-formulaire
a
. Dans les formulaires destinés à Acrobat ou Adobe Reader 8.1, l’expression SOM
a.b.a
renvoie
null
car le sous-formulaire
b
n’a pas d’enfant nommé
a
. Dans Acrobat ou Adobe Reader 9.0 (ou une version ultérieure), l’expression renvoie une erreur car
a
n’est pas un enfant valide de
b
.
Dans Acrobat ou Adobe Reader 8.1, les fonctions et variables contenues dans un script de nœud ne sont pas globalisées (contrairement aux objets de script) comme indiqué dans cet exemple :
<field name="field1">
event activity="initialize">
<script contentType="application/x-javascript">
// Function bar() is scoped to field1.initialize; nothing outside <event activity="initialize"> scope can see inside here (in 8.1)
function bar()
{
return "bar";
}
</script>
</event>
/field>
field name="field2">
<event activity="click">
<script contentType="application/x-javascript">
field1.bar();
</script>
</event>
</field>
Lorsque vous cliquez sur
field 2
dans un formulaire destiné à Acrobat ou Adobe Reader 8.0, la fonction
bar()
s’exécute.
Lorsque vous cliquez sur
field 2
dans un formulaire destiné à Acrobat ou Adobe Reader 8.1, la fonction
bar()
ne s’exécute pas. La raison de cela est que la fonction
bar()
est disponible uniquement depuis l’intérieur du script initialisé de
field1
Application de plage et objets de script
Les objets de script disposent d’une plage globale. Par conséquent, n’importe qui peut y accéder de n’importe où. Si vous disposez d’une méthode et que vous souhaitez qu’à la fois
field1.initialize
et
field2.click
puissent y accéder, placez-la dans un objet de script. L’application d’une plage stricte signifie que vous ne pouvez pas appeler
bar()
de n’importe quel emplacement dans un formulaire. Vous obtenez également une erreur d’exécution indiquant que la fonction
bar()
n’a pas pu être résolue. Le moteur de script a recherché
bar()
à l’intérieur de la plage à laquelle vous avez accès et ne l’a pas trouvé.
Application de plage et version cible
Si vous utilisez l’application de plage stricte, n’oubliez pas que de meilleures performances sont possibles dans les formulaires destinés à Acrobat ou Adobe Reader 8.1 et aux versions ultérieures. Evitez d’utiliser l’application de plage stricte dans des formulaires destinés à des versions antérieures d’Acrobat ou d’Adobe Reader. Sinon, les scripts des formulaires risquent de fonctionner différemment. Pour les formulaires existants, effectuez une copie de sauvegarde du formulaire avant d’activer l’application de plage stricte et vérifiez toujours le script à la fin de l’opération. Lorsque vous activez l’application de plage stricte, puis modifiez la version cible pour une version antérieure à Acrobat ou Adobe Reader 8.1, des messages d’avertissement s’affichent.
Utiliser l’application de plage
Lorsqu’un formulaire est destiné à Acrobat ou Adobe Reader 8.1 et que l’application de plage stricte est activée, les variables JavaScript déclarées sont libérées après l’exécution de chaque script. Lorsqu’un formulaire est destiné à Acrobat ou Adobe Reader 9.0 et aux versions ultérieures, l’application de plage stricte ne libère pas toutes les variables JavaScript. Une seule exception s’applique, lorsque vous refusionnez ou importez de nouvelles données.
Les améliorations de performances obtenues avec les règles d’application de plage stricte concernent les formulaires destinés à Acrobat ou Adobe Reader 8.1 et aux versions ultérieures. N’appliquez pas de règles de plage stricte aux formulaires destinés aux versions d’Acrobat ou Adobe Reader antérieures à la 8. Sinon, les scripts peuvent se comporter différemment ou ne pas fonctionner.
Pour activer l’application de plage stricte
-
Choisissez Fichier > Propriétés du formulaire, puis cliquez sur l’onglet Exécution.
-
Sélectionnez Règles d’application de plage stricte dans JavaScript, si l’option est disponible, puis cliquez sur OK.
Remarque :
Si l’option d’application des règles d’application de plage stricte n’est pas disponible dans l’onglet Exécution, l’application de plage stricte est déjà activée.