16. april 2008 - 14:52Der er
35 kommentarer og 1 løsning
Filvalg sendes til funktion
Jeg har en javascriptfunktion på min side, som har brug for en fil, som brugeren vælger lokalt. Når han har valgt filen, skal han trykke på en knap, hvorefter filen sendes til funktionen som argument, og funktionen udfører så noget med filen. Jeg har fundet nogle forskellige eksempler på filvalgsbokse, men ikke rigtig noget, hvor jeg kan sende filen videre til en funktion (funktionen virker fint, hvis jeg skriver filnavnet ind på kompileringstidspunkt). Hvordan laver jeg en funktion, hvor filen vælges og sendes videre til funktionen?
Nej, det er filindholdet (altså filen som sådan) der skal sendes videre til funktionen. Funktionen står så for at bruge fildataen til videre behandling.
Mht. 16/04-2008 14:56:10: hvis filen sendes videre til funktionen sådan, hvorledes kan funktionen så modtage filen, og sætte den ind i funktionens kode? Kan man ("SendMessage" er en anden funktion): function UploadTest(value){ SendMessage("Test2", "doIt", "value"); } ("value" er en streng, som representerer stien til filen)
Ahh ja, der er da vist noget med javascript og sikkerhed. Men hvad så med alle de eksempler, man kan finde online, som giver mulighed for at vælge en fil på computeren, giver de funktioner blot adgang til filnavnet og ikke til filen som sådan?
Nu har jeg lige overvejet situationen, og filen skal faktisk ikke uploades til serveren. Der sendes en funtion med på html-siden, som blot skal bruge indholdet af filen. Men det er ikke indholdet som sådan, den skal bruge. I funktionens argumenter skal der blot angives en sti til filen, og så burde funktionen virke. Er dette ikke muligt gennem javascript?
Den kan læses i notepad, som ganske almindelige tegn. Så det er ganske almindelige tegn. Hvis du spørger til, hvad filen representerer rendermæssigt, så er det en 3d-grafikfil.
Men når filen godt kan læses af en simpel teksteditor, kan filen så ikke også betragtes som ren tekst?
16/04-2008 17:18:06:
Jeg har en klasse, som står for selve renderingen. Renderingen er ikke et problem, og er derfor ikke interessant i denne sammenhæng. Filen (eller dens indhold) skal blot sendes videre til en klasse.
Hvad med Java Web Start - kan den tilgang ikke klare problemstillingen?
kkaen>> Jo, det ville måske nok kunne gøres. (Igen ville det dog skulle gøres med ASP.) Men ville du kunne få noget ud af, at have adgang til de mærkelige tegn, den indeholder?
Mærkelige tegn? Filen indeholder altså stadig ganske almindelig tekst, som alle kan læse og forstå. Og ja, jeg har absolut brug for at få adgang til filens eller dens indhold. Kun sådan kan jeg få renderet filens grafikindhold på skærmen.
Sende den med? Hvorhen? Det er jo meningen, at brugeren kan vælge en lokal fil, og få den vist i browseren. Og...ja...brugeren har vel selv lagt filen på sin computer. Det er sådan set ikke interessant for appllikationen, hvor obj-filen oprindelig kommer fra.
Men filen vises jo via en klasse, som får filen som argument, for derefter at vise outputtet i browseren.
Og brugeren skal jo angive hvilken fil, og hvor den er, for file://filsti kan udfyldes. Og hvordan får brugeren mulighed for dette, så informationen kan sendes videre til klassen?
På sin vis er det da rigtigt, at det kan betragtes som et sikkerhedshul. Men når nu tagget <input type="file"> findes, og brugeren kan advares om sikkerhedsrisikoen, så skulle det da nok kunne løses. Hvilket det også er gjort i andre eksempler. Når man kan lave nogle filvalgsbokse, så brugeren kan vælge sine egne filer i browserfunktionen, så kan man vel også sende filen videre til en funktion i javascript i browseren?
Du kan kun få stien, og ellers hente filen. Ellers skal du have adgang vha brugeren smider sitet i trusted sites, og så skal jeg personligt have en go' grund.
cogitans >> Jeg har på fornemmelsen, du misforstår problematikken. Du kan sagtens lade brugeren vælge en lokal fil med et file-input og loade den valgte fil i en iframe.
Det er til gengæld ikke tilladt at scripte på tværs af domæner. Derfor må JavaScript ikke kunne foretage sig noget med en kode eller fil, som kommer fra et andet domæne end det, JavaScriptet selv kommer fra.
Hvis det var muligt, ville det være et meget alvorligt sikkerhedshul. Så alvorligt, at det ikke skønnes nok at forsyne brugeren med en advarsel. Tro mig ... tusindvis af mennesker med dyb og bred viden om web-sikkerhed har været flittigt beskæftiget med dette problem. De har ikke evnet at komme med bedre løsninger end at forbyde cross-domain scripting - med mindre sitet er trusted.
Jeg kan godt se jeres pointer. Men kører javascript ikke lokalt? I så fald vil det vel ikke være "cross domain"? Jeg har downloaded nogle eksempler i Java Web Start, hvor der tilbydes en filbrowser (altså blot "Files"->"Open"->valg af fil), som vel burde gøre tricket. Der skal dog sættes noget specifikt sikkerhedshalløj op, hvilket jeg også har forsøgt, men uden held. Mon ikke sådan noget Java Web Start kan gøre tricket med at sende en fil videre til et javascript?
Jeg kender ikke Java Web Start, men det kunne lyde som Java - et helt andet sprog, som ikke har noget med JavaScript at gøre.
Jo, JavaScript kan sagtens køre lokalt - men jeg har fået forståelsen af, der var tale om en webside.
Du kan - som både jokkejensen og jeg har nævnt - godt få en webside til at tilgå lokale filer, hvis brugeren har sat sitet som trusted. Det kan du dog være helt sikker på, der ikke er nogen alm. brugere, der vil ;o)
-Men selvom Java Web Start er et andet sprog, så kan det vel godt kalde javascript-funktioner?
-Jo, der er tale om et website. Men selvom javascriptet hentes på websitet, så kører det vel i browseren, og dermed tildels lokalt? Suma sumarum er, at javascriptet gerne skal sende en lokal fil til en javascript-funktion på html-siden. Og javascriptet sender filen videre til et program, som også kører lokalt. Men om filen sendes gennem browseren til programmet eller ej, er sådan set lige meget. Blot klienten kan sende en lokal fil ind som argument til et program, som klienten har hentet gennem en browser, men som kører lokalt.
"-Men selvom Java Web Start er et andet sprog, så kan det vel godt kalde javascript-funktioner?" >> Ja, i Firefox.
"-Jo, der er tale om et website. Men selvom javascriptet hentes på websitet, så kører det vel i browseren, og dermed tildels lokalt?" >> Nej. Et JavaScript, hentet fra et website, kan ikke interagere med lokale filer.
"Suma sumarum er, at javascriptet gerne skal sende en lokal fil til en javascript-funktion på html-siden." >> Og det er, hvad vi længe har forsøgt at forklare dig ikke er muligt.
"Og javascriptet sender filen videre til et program, som også kører lokalt." >> Det er heller ikke muligt med et JavaScript, der hentes på en server.
"Blot klienten kan sende en lokal fil ind som argument til et program, som klienten har hentet gennem en browser, men som kører lokalt." >> Det kan jeg simpelthen ikke få til at give mening. I min web-verden er 'klienten' browseren ... hvad mener du med 'klienten'? =)
Det har du skam også ret i. Men jeg prøvede blot at forklare, at 'klienten' (=personen) har brug for at sende en af sine filer ind som argument til et program, som viser det beregnede output i browseren.
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.