[js] Met javascript extern script laden.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • xilent_xage
  • Registratie: Februari 2005
  • Laatst online: 23-09-2024
Hoi,

Ik gebruik inmiddels met veel plezier mijn javascript-inlcuder, die andere scripts dynamisch kan laden. De code:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function loadjscssfile(filename, filetype){
 if (filetype=="js"){ //if filename is a external JavaScript file
  var fileref=document.createElement('script')
  fileref.setAttribute("type","text/javascript")
  fileref.setAttribute("src", filename)
 }
 else if (filetype=="css"){ //if filename is an external CSS file
  var fileref=document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", filename)
 }
 if (typeof fileref!="undefined")
  document.getElementsByTagName("head")[0].appendChild(fileref)
}


Werkt prima, maar het gaat mis als ik een extern script probeer te laden. Bijvoorbeeld google maps:

JavaScript:
1
loadjscssfile("http://maps.google.com/maps/api/js?sensor=false", "js");


Het gekke is dat ie dan het nieuw gemaakte element niet toevoegt aan de head, maar de hele pagina wist, en een nieuwe head maakt met daarin alleen het toegevoegde element.

Iemand enig idee waarom?

Acties:
  • 0 Henk 'm!

  • Raymond P
  • Registratie: September 2006
  • Laatst online: 15:01
Heb je dit met alle externe js files of alleen files waar regels in staan zoals:

JavaScript:
1
2
3
4
  function getScript(src) {
    document.write('<' + 'script src="' + src + '"' +
                   ' type="text/javascript"><' + '/script>');
  }

- knip -


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
Op het moment dat je scripts inlaadt die een document.write doen dan gaat dynamisch laden niet werken idd. Heeft niks met het externe script te maken :)

Acties:
  • 0 Henk 'm!

Verwijderd

Kijk anders even hoe FirebugLite dit doet. Die laadt doormiddel van een bookmark ook een extern script, maar gebruikt wel wat extra trucjes om de crossdomain beveiliging te omzeilen:
http://getfirebug.com/firebuglite
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
(function(F,i,r,e,b,u,g,L,I,T,E)
{
    if(F.getElementById(b))
        return;
        
    E= F[i+'NS'] && F.documentElement.namespaceURI;
    E= E ? F[i+'NS'](E,'script') : F[i]('script');
    E[r]('id',b);
    E[r]('src',I+g+T);
    E[r](b,u);
    (F[e]('head')[0]||F[e]('body')[0]).appendChild(E);
    E=new%20Image;E[r]('src',I+L);
})(document,'createElement','setAttribute','getElementsByTagName','FirebugLite','4','firebug-lite.js','releases/lite/latest/skin/xp/sprite.png','https://getfirebug.com/','#startOpened');
(ik heb de enters zelf toegevoegd)
Dit lijkt te werken in alle browsers

Acties:
  • 0 Henk 'm!

  • xilent_xage
  • Registratie: Februari 2005
  • Laatst online: 23-09-2024
bedankt voor jullie reacties. Het lag idd zoals sommigen al opmerkten aan het feit dat er document.write's in het aangeroepen script stonden.

Voor de toekomstige bezoekers die hier via de zoekpagina komen de oplossing die ik heb gebruikt:

http://code.google.com/apis/loader/#Dynamic

werkt prima.