2010-05-21 5 views
1

Je suis un novice en programmation Javascript/Jquery, donc une excuse si c'est une question simple/stupide. J'essaie d'utiliser la fonction jQuery .getScript() pour actualiser une partie d'une page Web existante. Cette page Web doit être exécutée sur un système de fichiers local et une grande partie du formatage est effectuée à l'aide de cadres.Fonction jQuery getScript avec des cadres

À l'heure actuelle, il existe trois cadres principaux: une barre latérale affichant les «étendues» possibles, un cadre principal affichant la majorité du contenu de la page Web et un cadre de bas de page. L'entrée principale dans la page se trouve dans un fichier index.html, qui charge un fichier sidebar.html, main.html et footer.html dans chacun des cadres respectifs.

À son tour, le fichier main.html contient un certain nombre de fichiers javascript qu'il charge, le principal étant un fichier main.js, qui contient de nombreuses fonctions pour formater/traiter le contenu de cette fenêtre principale. Après avoir chargé ce fichier javascript, main.html charge quelques fichiers javascript, qui contiennent les données qui seront affichées dans le cadre principal. Ces fichiers chargés ont une structure de données fixe et dépendent des fonctions qui ont été chargées par le fichier main.js.

Chargement de la page Web fonctionne bien maintenant, mais quand un utilisateur essaie de passer à une autre "portée", la page Web entière est rechargée pour faire le commutateur. La seule différence dans la page Web est le contenu du cadre main.js, chargé par un ensemble différent de fichiers .js.

Suffisamment de texte, regardons du code. Lorsque la page Web se charge, j'ai essayé d'ajouter un simple appel à la fonction getScript dans un fichier .js au niveau index.html qui gère les étendues de commutation. Ce fichier, newFile, a des définitions de données différentes de celles du fichier oldFile.js précédemment chargé qui a été chargé dans le fichier main.html.

$ .getScript (/js/newFile.js);

Cependant, cela ne fonctionne pas, car newFile.js dépend d'une fonction parseData() qui est dans main.js. Si j'ouvre firebug, parseData ne se trouve pas dans l'onglet dom, ce que je suppose est lié à un problème de portée avec le fichier main.html et main.js existant dans un cadre différent.

J'ai essayé de cibler le "cadre" correct, mais je ne pense pas que je comprenne jQuery assez pour savoir ce qui se passe.

$ (window.parent.frames [0]). GetScript (/js/newFile.js);

Des suggestions?

Si je devais taper dans la console Firebug « parseData » il ne peut pas trouver: « ReferenceError: parseData n'est pas défini »

Cependant, si je tape window.parent.frames [1] .parseData, il peut trouver la fonction.

Désolé pour tout le décousu et la mauvaise compréhension de javascript. J'espère que quelqu'un peut fournir de l'aide!

Merci

+0

Cela a fini par être un problème avec moi en essayant de charger des fichiers d'un système de fichiers local. La même règle d'origine du domaine du navigateur m'a empêché d'accéder aux fichiers dont j'avais besoin. – user210099

Répondre

0

.getScript() exécute le script chargé dans le contexte mondial. Je suppose que votre fonction parseData() n'est pas disponible à portée globale.Vous pouvez essayer de définir parseData globalement en l'enveloppant dans un appel comme si jQuery.globalEval():

$.globalEval(" 
    function parseData(){ 
     alert('It works!'); 
    } 
"); 

Je ne l'ai pas testé mais j'ai couru dans des situations similaires en utilisant la fonction javascript setTimeout() car il exécute aussi au niveau mondial.