Toon posts:

[JAVA] Applet, showDocument() en 'file://'-protocol

Pagina: 1
Acties:

Verwijderd

Topicstarter
Momenteel ben ik bezig met het ontwikkelen van een Applet die bedoeld is om vanaf een lokale bron te worden geladen (dus NIET via een pagina op een externe webserver). In het geval van de meest simpele opstelling gebeurt het volgende:

1. Applet starten vanuit 'c:\applet.html'. Dit bestand wordt dus lokaal geopend met een webbrowser.
2. De Applet doet iets en schrijft het resultaat weg naar 'c:\result.html'.
3. De Applet roept showDocument() aan om het naar de aangemaakte resultatenpagina te browsen:
showDocument(new URL("file://C:/result.html"));

Dit werkt perfect. Echter, een probleem ontstaat wanneer ik het bestand 'applet.html' en de bijbehorende Applet plaats op een netwerkschijf (een schijf anders dan C). Dan gebeurt het volgende:

1. Applet starten vanuit 'z:\applet.html'.
2. De Applet doet iets en schrijft het resultaat (succesvol) weg naar 'c:\result.html'.
3. De aanroep met showDocument die nu volgt resulteert in niets. Er wordt geen foutmelding (in de Java console) gegeven en 'applet.html' blijft zichtbaar. Kennelijk wordt de showDocument aanroep nu genegeerd (waarschijnlijk door de browser, omdat de URL aanroep door showDocument wordt doorgegeven aan de browser om het af te handelen).

Dit zelfde probleem doet zich verder ook voor wanneer de zaak op een CD-ROM wordt gebrand en de Applet daar vanaf wordt geladen (waarbij het resultaat uiteraard nog steeds wordt weggeschreven naar de C schijf). Na wat zoeken op het internet vond ik een mogelijke oplossing, door de aanroep met showDocument op de volgende manier uit te voeren:

showDocument(new URL("file://MACHINE_NAAM/C$/result.html"));

(MACHINE_NAAM kan ook localhost zijn.)

Het bestand wordt op deze manier dus aangeroepen via het Windows netwerk en dit resulteert in een werkende Applet, maar... alleen wanneer er een netwerkverbinding is en dat is nu net het probleem. Het geheel moet kunnen werken op een lokaal systeem, vanaf een CD-ROM, zonder netwerkverbinding.

De hamvraag:
Weet iemand een oplossing voor dit probleem? Hoe kan ik er voor zorgen dat showDocument werkt met het file-protocol waarbij deze een bestand aanroept op een andere schijf (C schijf) dan de schijf (CD-ROM) van waar de Applet wordt geladen?

[ Voor 15% gewijzigd door Verwijderd op 17-05-2006 13:09 ]


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 20-02 14:32
Op dezelfde schijf werkt omdat je dan binnen het context pad van de Applet blijft.

Als je de applet op een diepere directory of in een andere directory wegzet als het result.html bestandje, dan verwacht ik dat het ook niet zou werken.

Punt is dat Applet's in een mooie zand bak (sandbox) mogen spelen en die legt allerlij restricties op aan je Applet. Sowieso vindt ik het wel bijzonder dat de applet uberhaupt bij de schijf kan komen en zelfs zomaar mag schrijven.

De reden dat het via die netwerk url wel werkt ligt ook in hoe de context afgehandeld wordt. Zal wel op de MACHINE_NAAM gebaseerd worden gok ik zo. Ik zou als ik jou was eens wat info proberen te vinden over hoe een applet ge-sandbox-ed wordt. Zal vast een lijstje tussen zitten met een overzicht wat je wel en niet zou moeten kunnen. (Ergens op http://java.sun.com zou je wel wat moeten kunnen vinden.)

  • MetroidPrime
  • Registratie: Oktober 2003
  • Laatst online: 25-01 09:16

MetroidPrime

Turn it up loud, captain!

Je zou de applet van een digitale handtekening kunnen voorzien, dan kan de applet meer rechten dan gebruikelijk krijgen. Een ander alternatief zou zijn om de applet om te bouwen naar een volledige applicatie, aangezien deze toch lokaal gestart wordt.

[ Voor 16% gewijzigd door MetroidPrime op 17-05-2006 20:38 ]

"Some girl on the street outside the bar just asked me if I was saved yet." "Yeah? What did you say?" "I told her 'I saved at the checkpoint a couple of minutes back and I can reload from there if I die.'


Verwijderd

Topicstarter
Ik heb de applet al 'gesigned' met volledige rechten. Dat moest gebeuren om het mogelijk te maken het resultatenbestand weg te schrijven naar de C schijf. Het kan verder geen applicatie worden, omdat het een Applet moet zijn binnen een bestaande webpagina. Deze webpagina wordt door de gebruiker lokaal geopend. Op die webpagina staat tekst en daarnaast dus de Applet en via die Applet moet dus, in dezelfde browser, de nieuwe (resultaten) pagina worden getoond. Dat gaat dus goed, behalve wanneer de pagina met de Applet van een andere locatie (schijf) wordt gestart dan de C schijf (waar het bestand op aangemaakt wordt en waar hij naar toe moet browsen) èn wanneer er geen netwerkverbinding is.