2010-02-09 2 views
1

J'ai quelques problèmes avec Adobe Air. Mon application a une architecture plutôt compliquée: la fenêtre html principale charge iframe avec des références à javascripts (par exemple DWRengine.js, jquery.js, main.js et ainsi de suite). C'est fait pour éviter les restrictions javascript d'Air sur la fonction 'eval', qui est largement utilisée dans mes scripts et dans DWR aussi.Accéder à la fenêtre supérieure d'Iframe dans Adobe Air

Dans le fichier main.js, j'essaie d'ajouter des écouteurs d'événement aux boutons et aux liens de la fenêtre principale.

Comme ceci:

$(document).ready(function(){ 
    $('body', top.document).click(function(){alert('a');}); 
}); 

Mais il n'y a pas d'effet! top.document est indéfini.

Je ne peux pas lier des actions à des événements lors du chargement de la page principale, car les objets qui les contiennent ne sont chargés qu'après l'événement onload de la page principale.

Aidez-moi, s'il vous plaît!

Merci d'avance, Mike.

Répondre

1

Vous travaillez dans deux sandbox différents, vous devrez donc configurer un pont de bac à sable.

Dans votre cas, vous devrez exposer dans l'interface aux méthodes dans le bac à sable d'application à l'aide du parentSandboxBridge

here are the docs in case you don't have them

Ainsi, dans la fenêtre du haut

// quoting from the docs 
var interface = {}; 
interface.save = function(text){ 
    var saveFile = air.File("app-storage:/save.txt"); 
    //write text to file 
} 
document.getElementById("yourIframe").contentWindow.parentSandboxBridge = interface; 

Bien sûr, ce won » t rendre vos bibliothèques disponibles dans le parent, mais vous pouvez traiter dans l'enfant et utiliser le parent pour faire les trucs de l'air

+0

Merci, ça a aidé, mais n'a pas résolu tout le problème. Maintenant, je peux appeler des fonctions de mes bibliothèques, mais la plupart de leurs actions utilisent jquery pour montrer et cacher des éléments. Dans la mesure où jquery est chargé et appelé depuis iframe, il utilise le document iframe, pas le document de la fenêtre principale comme prévu. – Mikhail

+0

Je ne pense pas que vous serez en mesure de référencer des éléments dans un bac à sable de l'autre. Pourquoi ne pas laisser l'iframe contenir toute l'interface utilisateur et seulement utiliser l'application pour faire des trucs comme les requêtes interdomaines et l'accès au système de fichiers – meouw

+0

Aussi, qu'évaluez-vous? si c'est juste JSON d'une réponse ajax, l'air le permet. – meouw