10
votes

Comment puis-je charger

3 Réponses :


10
votes

Je suis un peu surpris que cela ne fonctionne pas s> [edit: n'est plus surpris du tout, voir La réponse de Mtrovo .] em> ... mais voici ce que je fais, ce qui est surtout / s> non-jQuery par votre commentaire ci-dessous mais toujours assez bref:

var rawframe = document.getElementById('theframe');
var framedoc = rawframe.contentDocument;
if (!framedoc && rawframe.contentWindow) {
    framedoc = rawframe.contentWindow.document;
}
var script = doc.createElement('script');
script.type = "text/javascript";
script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js";
framedoc.body.appendChild(script);


4 commentaires

Merci TJ, c'est beau, je viens de contourner le problème que j'ai besoin de charger jQuery dans l'iframe, sans utiliser de JQuery pour le faire. (Parce que JQuery n'est pas encore chargé dans l'iframe pour faire le chargement)! - Est-il facile de le faire dans Pure JS?


@HAROLDO: Oui. En fait, la réponse était pure javascript que pour la première ligne. J'ai modifié la première ligne afin que ce soit pure javascript. Mais vous pouvez utiliser JQuery pour effectuer la charge, à condition que JQuery soit chargé dans la fenêtre de votre code (par opposition à la fenêtre de l'iframe). Mais je pense que Mtrovo a souligné pourquoi votre code d'origine ne fonctionnait pas, voir sa réponse pour plus.


"Document.body.AppendChild (script);" doit être "doc.body.appendchild (script);" droit!?


@ T.J.Crowder Ahh! "Cadre.body.AppendChild (script);" doit être "Framedoc.body.AppendCendChild (script);" droit!? Doit être une faute de frappe.



12
votes

Peut-être que l'erreur est avec votre chaîne, ne créez jamais une chaîne en JavaScript avec un littéral Script> strong> dedans.

$('#iframe').load(function() {
  $(this).contents().find('body').append('<scr' + 'ipt type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></scr' + 'ipt>');    
});


3 commentaires

Gah! Comment pourrais-je manquer ça ?! Je l'ai même signalé à quelqu'un d'autre dans une autre question (pas à ce sujet) plus tôt aujourd'hui . J'aimerais que je puisse +2 ceci.


"... ne crée jamais une chaîne avec ..." Eh bien, Créer IT (comme vous l'avez fait) va bien. Il y a le littéral là-bas c'est le problème.


J'étais presque là-bas dans la question "Le problème est quelque chose à voir avec les étiquettes de script insérées qui ne sont pas échappées correctement" Haha, merci.



5
votes

Avertissement: le chargement du script de cette manière rendrait les scripts exécutés dans le contexte de la fenêtre principale IE: Si vous utilisez une fenêtre de somescript.js, ce serait pas strud> la fenêtre de l'iframe!

function insertScript(doc, target, src, callback) {
    var s = doc.createElement("script");
    s.type = "text/javascript";
    if(callback) {
        if (s.readyState){  //IE
            s.onreadystatechange = function(){
                if (s.readyState == "loaded" ||
                    s.readyState == "complete"){
                    s.onreadystatechange = null;
                    callback();
                }
            };
        } else {  //Others
            s.onload = function(){
                callback();
            };
        }
    }
    s.src = src;
    target.appendChild(s);        
}

var elFrame = document.getElementById('#iframe');
$(elFrame).load(function(){
    var context = this.contentDocument;
    var frameHead = context.getElementsByTagName('head').item(0);
    insertScript(context, frameHead, '/js/somescript.js');
}


2 commentaires

L'accès au document de l'iframe a beaucoup de sens. Pouvez-vous parler plus de ce que la fonction fonctionne? Je ne vois pas cette syntaxe dans leurs documents


.load (fonction (Fonction () {} ...) est le rappel complet du moment où l'IFrame est effectué Chargement: API .jquery.com / Charge