2011-09-16 2 views
4

Donc j'essaye de charger un javascript à distance en utilisant $ .getScript de jquery, mais je suis perplexe sur la façon dont je peux transmettre des données au script externe. J'ai essayé de définir des variables avant l'appel, mais elles ne sont pas disponibles dans le script qui est chargé, et lorsque j'essaie de les envoyer/récupérer à l'aide de la chaîne de requête, le script distant essaie de lire la chaîne de requête du fichier de base dont il est appelé, pas lui-même. Y a-t-un autre moyen de faire ça? Ou est-il possible d'avoir un fichier javascript lu sa propre chaîne de requête plutôt que le fichier à partir duquel il est appelé (c'est chargé dans le navigateur)?

// editor ini 
var editor_ini = { page: current_page, action: 'edit' }; 
var foo = 'bar'; 
// load the editor 
$.getScript('assets/desktop/desklets/'+launcher.config.editor+'/execute.js', function(){}); 

Dans le fichier execute.js, le editor_ini et foo sont indisponibles, je reçois le même résultat avec:

// load the editor 
$.getScript('assets/desktop/desklets/'+launcher.config.editor+'/execute.js', { page: current_page, action: 'edit', foo: 'bar' }, function(){}); 

parce que le script distant semble obtenir la chaîne de requête de l'original document plutôt que celui utilisé lors de l'appel du fichier.

S'il importe, je tentais d'utiliser le query object plugin pour jquery pour la lecture de la chaîne de requête.

+2

Selon les docs pour jQuery.getScript(), « Le script est exécuté dans le contexte mondial, il peut se référer à d'autres variables et utiliser les fonctions jQuery. » @Alexi est probablement sur quelque chose. –

+0

Ah ça explique, j'ai supposé que le script serait exécuté dans la portée qu'il s'appelle. – wyqydsyq

Répondre

5

Je parie que votre var foo='bar' est dans une fonction, donc pas visible dans la portée globale. Essayez:

window.foo = 'bar' 
+0

A travaillé parfaitement, merci! :) Je me sens comme un idiot maintenant, portée toujours avec moi en JavaScript. – wyqydsyq

6

variable globale déclarée en javascript en ligne est accessible en externe javascript page chargée à l'aide $.getScript(). Assurez-vous que la variable est globale

2

des variables véritablement mondiales seront accessibles à votre script. Donc, si ce n'est pas le cas, c'est probablement parce que vos variables que vous pensez être globales ne le sont pas. Vous pouvez soit les déplacer vers la portée de niveau supérieur ou les définir sur l'objet fenêtre comme suggéré par Alexei.

Il existe d'autres moyens de partager des données. 1) Vous pouvez mettre un identifiant sur la balise <script> qui charge le code, puis le code obtient la valeur .src de cette balise et récupère la chaîne de requête sur l'URL réelle du script. J'aime cette option, mais je ne sais pas si vous pouvez le faire en utilisant jQuery.getScript() car je ne pense pas qu'il expose cela comme une option.

2) Vous pouvez faire en sorte que le script de chargement appelle une fonction que vous fournissez et renvoyer un objet avec les données souhaitées de cette fonction.

3) Une fois que le nouveau script est chargé, vous pouvez appeler une fonction setXXX() dans ce script pour définir l'état qu'il a besoin.

4) Vous pouvez définir des informations dans un cookie que l'autre script peut lire.

5) Vous pouvez encoder des données dans une valeur de hachage d'URL que l'autre script peut lire.

Questions connexes