2010-07-15 3 views
0

Salutations,Comment charger un script dans une application XUL après le chargement initial

mon application XUL a besoin de charger des scripts dynamiquement, pour cela, je tirais une fonction qui fonctionne dans les applications html/js réguliers:

function loadScript(url) 
{ 
    var e = document.createElement("script"); 
    e.src = url; 
    e.type="text/javascript"; 
    document.getElementsByTagName("head")[0].appendChild(e); 
} 

à quelque chose qui ne devrait travailler dans XUL:

function loadScript(url) 
{ 
    var e = document.createElement("script"); 
    //I can tell from statically loaded scripts that these 2 are set thru attributes 
    e.setAttribute('type' , "application/javascript"); //type is as per MDC docs 
    e.setAttribute('src' , url); 
    //XUL apps attach scripts to the window I can tell from firebug, there is no head 
    document.getElementsByTagName("window")[0].appendChild(e); 
} 

les balises de script se correctement ajouté, les attributs ont l'air bien, mais ça ne marche pas du tout, pas de code à l'intérieur de ces scripts chargés est exécuté ou même analysé.

Quelqu'un peut-il donner un indice sur ce qui pourrait se passer?

T.

Répondre

3
chaque fois que je poste sur un débordement de pile

Ok,

comme d'habitude, la réponse viendra très bientôt à travers une dernière recherche Google désespérée.

Cela fonctionne:

//Check this for how the url should look like : 
//https://developer.mozilla.org/en/mozIJSSubScriptLoader 
function loadScript(url) 
{ 
    var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader); 
    //The magic happens here 
    loader.loadSubScript(url); 
} 

Cela ne charge les fichiers locaux, qui est ce que j'ai besoin pour mon application.

Je suis assez déçu par Mozilla, pourquoi ne pas le faire de la même manière que html, de manière standard?

+0

Où serait le défi dans ce domaine? ;) – lucideer

1

J'ai essayé, et je pense que vous avez raison - je ne peux pas sembler obtenir XUL pour exécuter des balises de script dynamique en annexe - peut-être est un bug. Je suis curieux de savoir pourquoi vous voudriez bien - je ne peux pas penser à une situation où l'on aurait besoin de faire cela - peut-être que tout ce que vous essayez pourrait être réalisé d'une autre manière. Pourquoi est-ce qu'ils doivent être chargés dynamiquement?


Hors-sujet: sur les modifications apportées au script.

e.setAttribute('src',url); est également valide dans les pages Web normales et est en réalité plus «correct» techniquement que e.src=url; de toute façon (bien que plus long et pas bien pris en charge dans les anciens navigateurs).

Types application/javascript ou application/ecmascript sont censés travailler dans les pages Web normales et sont plus « correcte » que text/javascript, mais IE ne les supporte pas qu'ils ne sont pas normalement utilisés.

+0

Salutations, Je suis en train de faire des choses assez foiré; J'ai mal formé javascript, chargez-le de façon dynamique en XUL, ayez firefox, dites-moi quel est le numéro de ligne, mon script XUL analyse l'erreur, corrige le javascript mal formé pour le rendre un peu meilleur et continue à charger/réparer jusqu'à JavaScript fonctionne. – tomdemuyt

1

intérieur environnement XUL vous n'êtes autorisé à utiliser XHR + eval comme les suivants:

function loadScript (url) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", url, false); // sync 
    xhr.send(null); 
    if (xhr.status && xhr.status != 200) 
     throw xhr.statusText; 
    try { 
     eval(xhr.responseText, window); 
    } catch (x) { 
     throw new Error("ERROR in loadScript: Can't load script '" + url+ "'\nError message is:" + x.message); 
    } 
}; 
Questions connexes