Avatar billede monkeysee Nybegynder
04. juni 2003 - 08:05 Der er 6 kommentarer og
2 løsninger

Basis-URL for dokument.write

Mit scenarie er meget almindeligt: jeg genererer HTML ved hjælp af javascript's document.write, outputtet bliver vist i en seperat frame.

Nu er problemet blot, at mit script (eller rettere, siden som indeholder scriptet) befinder sig i én folder på serveren, og det dokument jeg genererer "befinder" sig i en anden (d.v.s, når redigeringen er overstået skal dokumentet gemmes fysisk i en anden folder).

Hvis det genererede HTML dokument indeholder billeder el. lign, så vil referencen (f.eks "images/my_img.gif") henvise relativt til folderen mit *script* befinder sig i, indtil jeg rent faktisk gemmer det genererede HTML fysisk på serveren og henter det påny. Hvilket ikke er meningen!!!

Mit spørgsmål: eksisterer der en måde at sætte et genereret dokuments "basis-URL", så billeder o.lign. bruger den virtuelle sti man har angivet?

Eks.: Et dokument som befinder sig i mappen "http://localhost/blabla/" med basis-URL sat til "http://localhost/testdir" 

Hvis jeg så skriver:
document.write('<img src="images/spacer.gif" border=0 alt="">')

så forsøger den at hente et billede på adressen
"http://localhost/testdir/spacer.gif"
Avatar billede nikolajdu Nybegynder
04. juni 2003 - 08:09 #1
Så vidt jeg ved kan du ikke ændre det via javascript, men du lave en virtuel URL i opsætningen af Apache (hvis det er det du bruger)

Så kan du henvise til <img src="http://localhost/virtuelurl/images/bla.gif">

/Nikolaj
Avatar billede monkeysee Nybegynder
05. juni 2003 - 00:49 #2
ville en virtuel URL mon være det samme som "virtuel mappe" på IIS ?

Det kunne godt løse problemet - det er selvfølgelig bare ærgeligt at skulle til at rode med indstillingerne på serveren, da jeg ikke har en fysisk server stående men må nøjes med hvad Dantel Hosting kan tilbyde af administrationsfaciliteter.

Findes der en ISP der tilbyder fuldstændig kontrol over disse funktioner, hvadenten det er Apache, IIS eller noget helt andet? Så har jeg nemlig noget at arbejde med.
Avatar billede olebole Juniormester
08. juni 2003 - 15:58 #3
<ole>

Du er ude i en løsningsmodel, der lægger op til en masse øretæver  :)
Den eneste rigtige måde at gøre det på, er at udskifte stierne i det øjeblik, du gemmer siden.

I øvrigt er dit scenarium ikke 'meget almindeligt'. Jeg er stødt på mange forskellige problemer, men aldrig et lignende.
Som oftest er det i CMS-sammenhænge, man støder ind i billedsti-problemer, som ovenstående ... men da du bruger document.write() på den måde, du beskriver, ser det ikke helt ud til at være det, du roder med ... så deeeeeeet ...  ;o)

/mvh
</bole>
Avatar billede monkeysee Nybegynder
12. juni 2003 - 22:06 #4
Hej,

Tak for indsigtsfulde kommentarer! I får jeres fortjente point hvis I gider at oprette et svar!!!

Og, ole, det ER faktisk et CMS lignende scenarie - men næsten 100% client-side/Explorer-only.

Jeg går ud fra at "basis-URL'er" ikke kan lade sig gøre af sikkerhedsmæssige hensyn. Og det er vel egentlig OK...Istedet vil jeg lave en fuldstændig sti til hver enkelt fil, så skidtet virker alligevel. Det er bare ekstra arbejde, i form af regulære udtryk (som ikke ligefrem er min skrappeste side)...
Avatar billede nikolajdu Nybegynder
12. juni 2003 - 22:23 #5
oki og bøh ;-)
Avatar billede nikolajdu Nybegynder
12. juni 2003 - 22:23 #6
"ville en virtuel URL mon være det samme som "virtuel mappe" på IIS ?" - Ja det vil jeg mene.
Avatar billede olebole Juniormester
13. juni 2003 - 03:17 #7
Det er ikke så svært. Clientside kan du skrive:

str = "En eller anden tekst, skift du har fra editoren."
str = str.replace( /skift/gi, "som" );
alert(str);

Den skulle være meget let at overskue:
Det, der står mellem / og / skal skiftes ud med det, der står mellem " og ".
'gi' betyder 'global' og 'insensitive' - hvilket betyder, alle forekomster skal skiftes ud i hele strengen (global) ... uden hensyn til små og store bogstaver (insensitive).

Visse tegn skal i søgestrengen escape'es med en '\' ... f.eks. '/'. Det vil sige, man f.eks. skal skrive: /http:\/\/www. ...osv... /gi

Derfor kunne din replace-funktion se sådan ud:

var str = "blabla http://localhost/testdir/ blabla http://localhost/andetdir blabla";
str = str.replace(/http:\/\/localhost\/testdir\//gi, "[ HER STOD DET ]");
alert(str);

I strengen, du sætter ind, skal du ikke escape slashes ... kun i søgestrengen.
Håber, det kan hjælpe lidt  :)
/mvh
Avatar billede olebole Juniormester
13. juni 2003 - 03:19 #8
nåja .... svar  :)
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