Het kenmerk
documentRoot
geeft de lokale map op waaruit URL's moeten worden geladen die worden omgezet in bestanden in de locatie die wordt opgegeven door
sandboxRoot
.
Bij het omzetten van URL's, of dit nu gebeurt bij het framekenmerk
src
dan wel in inhoud die in het frame wordt geladen, wordt het deel van de URL dat overeenkomt met de waarde die wordt opgegeven in
sandboxRoot
, vervangen door de waarde die wordt opgegeven in
documentRoot
. Bij de volgende frametag geldt dus:
<iframe src="http://www.example.com/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"/>
child.html
wordt geladen uit de submap
sandbox
van de toepassingsinstallatiemap. Relatieve URL's in
child.html
worden omgezet op basis van de map
sandbox
. Merk op dat bestanden op de externe server op
www.example.com/air
niet toegankelijk zijn in het frame, omdat AIR zou proberen ze te laden uit de map app:/sandbox/.
Geeft een gebeurtenishandler op voor de framegebeurtenis
dominitialize
. Dit is een AIR-specifieke gebeurtenis die wordt geactiveerd wanneer de window- en document-objecten van het frame zijn gemaakt, maar voordat er scripts zijn geparseerd of documentelementen zijn gemaakt.
Het frame verzendt de gebeurtenis
dominitialize
zo vroeg tijdens de uitvoering van de laadsequentie, dat eventuele scripts in de onderliggende pagina kunnen verwijzen naar objecten, variabelen en functies die door de handler
dominitialize
zijn toegevoegd aan het onderliggende document. De bovenliggende pagina kan alleen rechtstreeks objecten toevoegen aan of toegang krijgen tot objecten in een onderliggend document, als de bovenliggende pagina zich bevindt in dezelfde sandbox als de onderliggende. Een bovenliggende pagina in de toepassingssandbox kan echter wel een sandboxbridge tot stand brengen voor communicatie met inhoud in een niet-toepassingssandbox.
In de volgende voorbeelden ziet u hoe u de iframe-tag in AIR gebruikt:
Plaats
child.html
in een externe sandbox zonder toewijzing aan een werkelijk domein op een externe server:
<iframe src="http://localhost/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://localhost/air/"/>
Plaats
child.html
in een externe sandbox, waarbij XMLHttpRequests alleen zijn toegestaan voor
www.example.com
:
<iframe src="http://www.example.com/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"/>
Plaats
child.html
in een externe sandbox, waarbij XMLHttpRequests zijn toegestaan voor een willekeurig extern domein:
<iframe src="http://www.example.com/air/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"
allowCrossDomainXHR="allowCrossDomainXHR"/>
Plaats
child.html
in een lokaal-met-bestandssysteem sandbox:
<iframe src="file:///templates/child.html"
documentRoot="app:/sandbox/"
sandboxRoot="app-storage:/templates/"/>
Plaats
child.html
in een externe sandbox waarbij de gebeurtenis
dominitialize
wordt gebruikt om een sandboxbridge tot stand te brengen.
<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>
Het volgende document,
child.html
, illustreert hoe onderliggende inhoud de bovenliggende sandboxbridge kan benaderen:
<html>
<head>
<script>
document.write(window.parentSandboxBridge.testProperty);
</script>
</head>
<body></body>
</html>
Zie
Cross-scripting van inhoud in verschillende beveiligingssandboxen
en
HTML-beveiliging in Adobe AIR
voor meer informatie.