L’attribut
documentRoot
indique le répertoire local à partir duquel sont chargées les URL renvoyant à des fichiers situés à l’emplacement spécifié par
sandboxRoot
.
Lors de la résolution des URL, soit dans l’attribut
src
du cadre soit dans le contenu chargé dans le cadre, la partie de l’URL correspondant à la valeur précisée dans
sandboxRoot
est remplacée par celle définie dans
documentRoot
. Par conséquent, dans la balise de cadre suivante :
<iframe src="http://www.example.com/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"/>
child.html
est chargé depuis le sous-répertoire
sandbox
du dossier d’installation de l’application. Les URL relatives contenues dans
child.html
sont résolues en fonction du répertoire
sandbox
. Vous noterez que les fichiers situés sur le serveur distant à l’adresse
www.example.com/air
ne sont pas accessibles dans le cadre, car AIR tenterait sinon de les charger à partir du répertoire app:/sandbox/.
Indique un gestionnaire d’événement pour l’événement
dominitialize
d’un cadre. Cet événement, spécifique à AIR, est déclenché une fois que les objets window et document du cadre ont été créés, mais avant l’analyse des scripts ou la création d’éléments de document.
Le cadre distribue l’événement
dominitialize
suffisamment tôt dans la séquence de chargement pour qu’un script de la page enfant puisse référencer les objets, variables et fonctions ajoutés au document enfant par le gestionnaire
dominitialize
. La page parent doit se trouver dans le même sandbox que l’enfant pour pouvoir insérer ou ouvrir directement tout objet figurant dans un document enfant. Toutefois, un parent situé dans le sandbox de l’application peut établir un pont de sandbox afin de communiquer avec le contenu d’un sandbox autre que d’application.
Les exemples suivants illustrent l’utilisation de la balise iframe dans AIR :
Placez
child.html
dans un sandbox distant, sans définir de mappage à un domaine réel situé sur un serveur distant :
<iframe src="http://localhost/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://localhost/air/"/>
Placez
child.html
dans un sandbox distant, en autorisant uniquement les requêtes XMLHttpRequest émises en direction de
www.example.com
:
<iframe src="http://www.example.com/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"/>
Placez
child.html
dans un sandbox distant, en autorisant les requêtes XMLHttpRequest émises en direction de n’importe quel domaine distant :
<iframe src="http://www.example.com/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"
allowCrossDomainXHR="allowCrossDomainXHR"/>
Placez
child.html
dans un sandbox local avec système de fichiers :
<iframe src="file:///templates/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="app-storage:/templates/"/>
Placez
child.html
dans un sandbox distant en vous servant de l’événement
dominitialize
pour établir un pont de sandbox :
<html>
<head>
<script>
var bridgeInterface = {};
bridgeInterface.testProperty = "Bridge engaged";
function engageBridge(){
document.getElementById("sandbox").parentSandboxBridge = bridgeInterface;
}
</script>
</head>
<body>
<iframe id="sandbox"
src="http://www.example.com/air/child.html"
documentRoot="app:/"
sandboxRoot="http://www.example.com/air/"
ondominitialize="engageBridge()"/>
</body>
</html>
Le document
child.html
suivant montre comment un contenu enfant peut accéder au pont de sandbox parent :
<html>
<head>
<script>
document.write(window.parentSandboxBridge.testProperty);
</script>
</head>
<body></body>
</html>
Pour plus d’informations, voir
Programmation croisée du contenu dans des sandbox de sécurité distincts
et
Sécurité HTML dans Adobe AIR
.