Avatar billede mik28 Seniormester
24. november 2011 - 08:48 Der er 17 kommentarer og
1 løsning

Sætte Javascript ind i head

Hej Eksperter.

Jeg har en udfordring som går ud på at jeg gerne vil genererer noget JavaScript dynamisk. d.v.s. jeg vil jeg have noget JS op i <head> i stil med

<head>
<script type="text/javascript">
$(document).ready(function() {
  $("#iframe").lightbox({
  'width'                : 400,
  'height'                      : 600,
  'transitionIn'                : 'fade'
});
           
});   
</script>
</head>

Det er en række lightbokse som jeg bruger. Kan jeg gøre noget i den her stil.
function lavLightbox(){
var light=document.createElement('script');
var text = document.createTextNode("MIT LIGHTBOX_SCRIPT");
light.setAttribute("type","text/javascript");
light.appendChild(text);

document.getElementsByTagName("head")[0].appendChild(light);
}

Mit spørgsmål er i virkeligheden om det er smart og om jeg gør det på den rigtige måde.
Avatar billede mik28 Seniormester
24. november 2011 - 12:05 #1
Hvordan får jeg skrevet det her

$(document).ready(function() {

            $("#iframe").lightbox({
                    'width'                : 500,
                    'height'            : 400,
                    'transitionIn'        : 'fade',
                    'transitionOut'        : 'fade',
                    'speedIn'          : 1500,
                    'speedOut'          : 1500,
                    'scrolling'        : 'no',
                    'type'                : 'iframe',
                    'overlayOpacity'    : '0.8',
                    'overlayColor'      : '#000',
                    'centerOnScroll'    : 'true'
            });
           
        });

om så jeg kan putte det ind i

var text = document.createTextNode("MIT LIGHTBOX_SCRIPT");

Har prøvet med

var iframe="#iframe";
document.createTextNode("$(document).ready(function() {$("+iframe+").lightbox({'width':500,'height':400,'transitionIn':'fade','transitionOut':'fade','speedIn':1500,'speedOut':1500,'scrolling':'no','type':'iframe','overlayOpacity':'0.8','overlayColor':'#000','centerOnScroll':'true'});});");   

Får en illegal character fejl, men jeg kan ikke se hvad der går galt
Avatar billede olebole Juniormester
24. november 2011 - 16:17 #2
<ole>

Det kan du ikke, men du kan dynamisk indsætte et script tag, der linker til en JS-fil

/mvh
</bole>
Avatar billede JensPeterSvensson Nybegynder
24. november 2011 - 18:52 #3
Du kan formentlig vel bare eval det:

eval("$(document).ready(function({$('#iframe').lightbox({'width':500,'height':400,'transitionIn':'fade','transitionOut':'fade','speedIn':500,'speedOut':500,'scrolling':'no','type':'iframe','overlayOpacity':'0.8','overlayColor':'#000','centerOnScroll':'true'});});");

Skal lige siges at ved eval (Hvis det virker), skal du sikrer dig at det kun er kode du har skrevet der bliver evalueret.
Avatar billede olebole Juniormester
24. november 2011 - 21:39 #4
For mig er det lidt svært st finde begrundelsen for, at en evaluering af udtrykket skulle hjælpe(?)

Derudover er eval ikke bare potentielt farlig - den er også helt uden sidestykke JS's langsomste funktion
Avatar billede JensPeterSvensson Nybegynder
24. november 2011 - 22:53 #5
Hvis man kun afvikler den en gang kan dens hastighed vel være underordnet.

Dens sikkerhed syntes jeg allerede jeg havde taget højde for.

Og min tanke var, at det som brugeren ønskede var at kunne give en tekst, og få fortolket den som javascriptkode. Hvad vel mere eller mindre er præcis, hvad eval gør.
Avatar billede olebole Juniormester
25. november 2011 - 00:05 #6
Har man brug for eval, har man skrevet en uhensigtsmæssig kode. Hvorfor skrive JS som tekst? Der må ligge en fornuftig løsning et trin tiligere  =)
Avatar billede mik28 Seniormester
25. november 2011 - 09:17 #7
Grunden til jeg gerne vil skrive JS ud som tekst er fordi jeg ønsker at flytte det op i head tagget. Jeg har et stykke kode som genererer JS samt et link. Det er et element som kan blive kørt X antal gange. Det betyder at JS ligger og roder rundt i mit markup. Det var egenligt bare det jeg ville undgå.
Avatar billede olebole Juniormester
25. november 2011 - 17:28 #8
Det var noget i den retning, jeg forestillede mig - og spørgsmålet lyder derfor stadig: Hvorfor skrive/generere JS som tekst? Hvorfor ikke generere det som eksekverbar JS?
Avatar billede mik28 Seniormester
25. november 2011 - 18:22 #9
Jeg ved ikke hvordan jeg gør det
Avatar billede olebole Juniormester
25. november 2011 - 23:15 #10
Mon du kunne lokkes til at vise, hvad det er, du gør?
Avatar billede mik28 Seniormester
26. november 2011 - 06:46 #11
Jeg skriver f.x

$(document).ready(function() {

            $("#iframe<DEN_RELEVANTE>").lightbox({
                    'width'                : 500,
                    'height'            : 400,
                    'transitionIn'        : 'fade',
                    'transitionOut'        : 'fade',
                    'speedIn'          : 1500,
                    'speedOut'          : 1500,
                    'scrolling'        : 'no',
                    'type'                : 'iframe',
                    'overlayOpacity'    : '0.8',
                    'overlayColor'      : '#000',
                    'centerOnScroll'    : 'true'
            });
         
        });


ud.
Avatar billede mik28 Seniormester
26. november 2011 - 06:48 #12
Problemet er ikke at det ikke virker, for det virker sådan set fint. Sagen er at jeg gerne vil have alt hvad der handler om lightbox sammen og op i head hvor det hører hjemme.
Avatar billede olebole Juniormester
26. november 2011 - 13:43 #13
Ja, det er forlængst gået op for mig, at du skriver noget kode ud i tekst. Hvordan den ser ud, er jeg i første omgang ligeglad med. Det, der er interessant for din løsning er, hvordan det foregår - og om du ikke ligeså godt kan kalde jQuery uden at skrive kode ud i tekst  =)

I øvrigt kan man ikke sige, at JavaScript 'hører hjemme' i HEAD elementet. Det er absolut intet i vejen for, at JS kan stå i BODY elementet. Det resulterer ikke i dårligere kode
Avatar billede olebole Juniormester
26. november 2011 - 13:45 #14
Kan du ikke prøve at linke til siden, så vi kan se, hvad det er, du prøver - hvordan - og hvorfor?
Avatar billede mik28 Seniormester
26. november 2011 - 14:19 #15
Som jeg hører det er det jeg vil i virkeligheden meningsløst. Logikken i koden indsætter

$(document).ready(function() {
osv

på baggrund af nogle variable. Det sker så X antal gange. Hvordan jeg havde tænkt mig det skulle virke fremgår af selve spørgsmålet. Hvorfor var egenlig bare for at gøre koden mere overskuelig.

Jeg har fået svar på mit spørgsmål og siger tak for indlæggene :-)
Avatar billede olebole Juniormester
26. november 2011 - 14:31 #16
"Som jeg hører det er det jeg vil i virkeligheden meningsløst" >> Som jeg hører det, lytter du ikke efter - og 'hører' derfor noget, der hverken er blevet sagt eller ment.

"Hvordan jeg havde tænkt mig det skulle virke fremgår af selve spørgsmålet" >> Ja, men det er heller ikke det, der bliver spurgt om.

Husk at lukke tråden
Avatar billede mik28 Seniormester
26. november 2011 - 14:48 #17
Okay, lukker
Avatar billede olebole Juniormester
26. november 2011 - 15:21 #18
Hvis det skyldes, at du har et script tag, skrevet ud i BODY elementet - og du af en eller anden grund gerne vil fjerne det - kan du jo bare gøre det. Dets funktioner er læst ind i hukommelsen, når browseren har læst scriptet. Prøv f.eks. dette dokument i en browser (klik gerne et par gange på knappen - scriptet bliver kørt, selvom tagget er fjernet):


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>

<script type="text/javascript">
function foo() {
    alert("Før: "+document.body.innerHTML);
    var aScripts = document.getElementsByTagName("script");
    if (aScripts.length>0) {
        for (var i=0; i<aScripts.length; i++) aScripts[i].parentNode.removeChild(aScripts[i]);
    }
    alert("Efter: "+document.body.innerHTML);
}
</script>

<p><button onclick="foo()">Send</button></p>

</body>
</html>

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester