# Lokale Dokumente mittels window.open() öffnen (FF/IE)



## N0ACE (9. September 2009)

Schönen guten Morgen zusammen!


Für eine Intranet-Applikation ist es notwendig, Dateien (vorrangig PDFs), welche sich auf einem eingebundenem Netzlaufwerk befinden, in einem neuen Popup zu öffnen.

Mein Code dazu schaut so aus:


```
function open_popup(_uri)
{
	// setting width and height for the popup window
	var w = screen.availWidth - 100;
	var h = screen.availHeight - 100;

	// setting other params
	var params = 'width=' + w +
		', height=' + h + 
		', top=50, left=50, ' + 
		', resizable=yes, toolbar=no, location=no, directories=no, menubar=no, scrollbars=yes, status=yes';

	// open the new window which gets the focus
	popup = window.open(_uri, '', params);
	popup.focus();
}
```

So, nun sieht der Parameter '_uri' wie folgt aus:

```
z:/public/foobar.pdf
```

Im IE funktioniert dies auch so, wie es soll, nur kommt beim Firefox folgende Meldung: "Firefox weiß nicht, wie diese Adresse geöffnet werden soll, da das Protokoll (z) mit keinem Programm verknüpft ist".

Daraufhin habe ich die Links folgendermaßen geändert:

```
# vorher
z:/public/foobar.pdf

# nachher
file://z:/public/foobar.pdf
```

Weiterhin läuft es im IE so, wie es soll. Diesmal kommt im FF keine Meldung, aber auch keine Regung... Firebug meldet folgenden Error: "uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMJSWindow.open]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://intranet/common.js :: open_popup :: line 317" data: no]"


Habt ihr eine Idee, wie ich den lieben Feuerfuchs dazu bekomme,  Dateien, welche nicht via HTTP erreichbar sind, in einem Popup zu öffnen? Das kuriose ist ja, dass FF die Datei öffnet, wenn ich 

```
z:/public/foobar.pdf
```
direkt in die Adresszeile eingebe, nur eben mittels window.open will er nicht :/


Für Eure Hilfe bedanken ich mich voraus!


----------



## chmee (9. September 2009)

Dass IE Vieles anders sieht, weiss man ja. Auch in diesem Fall würd ich sagen, das ist eine "microsoftsche" Erlaubnis, die iA ein Sicherheitsloch ist. Wie wäre es, wenn Du der url per Get-Data den Filenamen mitgibst, also eben nicht die Datei öffnest, sondern eine Seite, wo die PDF-Datei embedded ist.

http://www.tutorials.de/forum/html/251940-pdf-per-embed-einbinden.html

mfg chmee


----------



## N0ACE (9. September 2009)

chmee,

Danke für deinen schnellen Vorschlag!

Der Code ist straight-forward:

```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>PDF embed</title>
<meta http-equiv="content-language" content="de" />
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style type="text/css">
#file {
	width:			800px;
	height:			600px;
}
</style>
</head>
<body>
	<embed id="file" src="<?php echo $_GET['file']; ?>" />
</body>
</html>
```


Ich habe es versucht, hat aber leider auch nicht geholfen:

Fall A) embed src="z:/public/foobar.pdf"
- IE prompt mit der Meldung "Zugriff Verweigert" (kleines Alert-Fenster, welches im Titel "Adobe PDF-Dokument" stehen hat). Danach zeigt er ein weisses Viereck an.
- FF zeigt nur das weisse Viereck an, ohne Fehlermeldung.

Fall B) embed src="file://z:/public/oobar.pdf"
- IE: Selbes Spiel: Fehlermeldung, dann weisses Viereck
- FF: Zeigt diesmal gar nichts an, noch nicht mal das weisse Viereck.


----------



## chmee (9. September 2009)

War ein bisschen vorschnell  Wäre genauso ein Einfallstor, wenn man jegliche Files per embed in die Seite einbauen könnte. Deswegen bin ich positiv überrascht, dass beide Browser den Zugriff verhindern.

Eine Sache, die ich grad' gelesen habe : Die Verlinkung auf ein Netzlaufwerk oder lokales Laufwerk ist nicht erlaubt. ergo müsstest Du den Datei/Fileserver irgendwie per url definieren können. Also zB als internen ftp-Server aufsetzen oder -wenn möglich- einen Alias im Webordner zu den Daten erstellen. Somit könntest Du anstatt mit Z:/Daten/2009/foo.pdf mit src="/Daten/foo.pdf" darauf zugreifen. Vielleicht kannst Du einfach per ../ dorthin delegieren.. Ich würde auch in dieser embed-Seite (oder schon davor) den absoluten Pfad zur Datei zeigen, welcher -als Bonus- in den Explorer kopert werden könnte.

Hier noch was zum Lesen : http://www.useit.com/alertbox/open_new_windows.html

mfg chmee


----------



## ComFreek (9. September 2009)

Dann könnte man ja lokale Dokumente auch nicht mit Firefox öffnen, oder?

Du musst vor "Z:" "file://" anbringen. Das ist das Format anstatt http.


----------



## chmee (9. September 2009)

Hat er auch probiert. Fall B.

Die Seiten, die ich bis Dato gefunden habe, sagen alle auch nur Weniges:

zB
Man sollte dem Browser das Weiterleiten zum Viewer mittels eines AddOn überlassen.
Man sollte den User entscheiden lassen, ob speichern oder anschauen.

Ich kann es nachvollziehen, dass es nicht gehen sollte, per Scripting (JS) eine lokale Datei aufzurufen. Wobei ich bei einem Link oder einem Redirect wiederum davon ausgehe, dass der Browser die Entscheidung dem User überlässt, wie zu verfahren ist.

Wie sieht es aus,wenn Du es damit versuchst?


```
<?php header($_GET[url]); ?>
```


mfg chmee


----------



## ComFreek (9. September 2009)

Achso sorry. 

Wenn ich eine Datei von Xampp mit FF öffne ist bei mir die URL:

file:///C:/xampp/htdocs/index.html

Mit drei "/" !


----------



## N0ACE (9. September 2009)

Ich habe erneut alle Varianten geprüft, mit folgenden Link-Schemata:

A)   z:/public/foobar.pdf
B)   file://z:/public/foobar.pdf
C)   file:///z:/public/foobar.pdf

Leider ohne Erfolg: Der IE macht's, der FF nicht.

chmee, auch der Tipp mit 
	
	
	



```
<?php header($_GET[url]); ?>
```
 hat leider nur zu einer weissen Seite geführt (ohne Fehlermeldungen o.ä.; nur weiss)...


----------



## Sven Mintel (9. September 2009)

Moin,

ich glaube, ihr müsst da nicht weiter mit den Pfaden herumprobieren, chmee's erste Vermutung traf ja den Nagel schon ausreichend auf den Kopf.

Es könnte gehen, wenn man das Skript 
1.signiert
2. ihm durch den User erweiterte Rechte erteilen lässt(UniversalFileRead)

probiert hab ich das noch nicht, kann also nicht sagen, ob und wie es funktioniert...eine Beschreibung dazu gibts hier: http://www.mozilla.org/projects/security/components/signed-scripts.html

Auf was für Client-OS muss diese Anwendung denn überhaupt lauffähig sein, gibt es da Einschränkungen?


----------



## N0ACE (10. September 2009)

Sven Mintel hat gesagt.:


> Moin,
> Es könnte gehen, wenn man das Skript
> 1.signiert
> 2. ihm durch den User erweiterte Rechte erteilen lässt(UniversalFileRead)
> ...


Werde ich mir mal in Ruhe anschauen, danke! Bisher sagen mir weder signierte Skripte was, noch UniversalFileRead...  



Sven Mintel hat gesagt.:


> Auf was für Client-OS muss diese Anwendung denn überhaupt lauffähig sein, gibt es da Einschränkungen?


Ausschließlich Win XP. Ich selber arbeite zwar von 'nem Mac aus, aber das ist denen ja Wurscht 

Und 80% haben den IE7, 15% den IE8 und 5% den IE6. Also auf den 6er kann man getrost pfeifen (Anm.: Juhuu)


----------

