Javascript kommt vor php

Hallo zusammen,

als nicht Mitglied bin ich schon oft fündig geworden auf diesen Seiten. Nun habe ich ein Problem was ich einfach nicht gelöst bekomme…

Ich möchte für eine Art Intranet ein Script das ohne Druck-Dialog ein Bild ausdruckt. Das habe ich gefunden (nur für IE). Nun übergibt ein Formular aber immer ein anderes Bild zum drucken, wesshalb ich auf der Empfängerseite erst eine Abfrage mache, welches Bild gedruckt werden soll und dieses dann an das Javascript übergebe.

Der Code:

sub laracroft
set ie=createObject(„InternetExplorer.Application“)
tombraid=window.location
ie.navigate (tombraid)
YesNo=MsgBox(„Ausdrucken?“, vbYesNo)
If YesNo = vbYes Then ie.ExecWB 6, 2
end sub

<?php $bild=$_REQUEST['druckbild'];
echo " ![](\"$bild\")"; if (file\_exists($bild)) { echo ""; } ?\>

hallo, es handelt sich hier nicht um ein JavaScript sondern um ein VisualBasic-Script. (VBScript)

Bitte an einen VB-Script Fachmann wenden.

Hallo,

du kannst javascript dazu erzwingen, den Script nach bestimmten Zeit auszuführen.
Zum Beispiel nach 10 Sekunden und zwar so:

window.setTimeout(function(){
sub laracroft
set ie=createObject(„InternetExplorer.Application“)
tombraid=window.location
ie.navigate (tombraid)
YesNo=MsgBox(„Ausdrucken?“, vbYesNo)
If YesNo = vbYes Then ie.ExecWB 6, 2
end sub
}, 10000);

Beste Grüße,…

Du könntest auf jeden Fall mal versuchen, die JavaScript-Methode Javascript:laracroft() im OnClick-Event eines Buttons auf der Seite aufzurufen. Wenn Du ihn drückst und das Bild wird richtig gedruckt, dann hat Dein Problem wirklich etwas mit der Reihenfolge zu tun. Ansonsten ist es ein anderer Fehler im Script. (Dass das manuelle Drucken klappt, heißt ja noch nicht, dass später auch das JS-Skript klappen würde.)

Eigentlich scheint mir der Aufruf im onload-Event des Image-Tags vernünftig zu sein. Falls tatsächlich im existierenden Code die Druck-Funktion aber doch zu früh aufgerufen wird, könntest Du auf ein Event der Seite gehen. Ich meine, es gibt ein Event, dass erst ausgelöst wird, wenn die gesamte Seite fertig gerendered ist. Müsste ich aber auch nach googeln.

HTH

Viel Erfolg!

Danke - drei hilfreiche Antworten!

@ Wilhelm
Das ist ja eigentlich offensichtlich :smiley:

@c.e.y.
Die Zeitverzögerung ist leider nicht angesprungen. Ich hatte es auch mit dem sleep() für php probiert, aber da lädt die komplette Seite auch erst nach dem Countdown.

@Herr Grüne
Ich habe den Button eingebaut und bekomme statt dem Bild folgende Meldung im Druck:
Notice: Undfined index: druckbild in C:\xampp\htdocs\druckseite.php on line 21

Soweit ich das verstehe, hat das Script schlicht kein Bild/Bildpfad gefunden. Die if Abfrage sagt ja aber, dass das Bild und der Bildpfad in Ordnung sind?!

Der Fehler ist schon vor der if-Anfrage. PHP erwartet, dass der Request-Parameter druckbild existiert, was er offenbar in Deinem aktuellen Setting nicht tut. Warum, weiß ich nicht? Ist er denn durch das Absenden eines entsprechenden Formulars auf dieser PHP-Seite gelandet?

Du könntest zum Test auch einfach die komplette URL eines Bildes manuell in die Variable $bild schreiben, also die Zeile

$bild=$_REQUEST[‚druckbild‘];

ersetzen durch z.B.:

$bild = ‚http://www.ja-pics.net/images/full/101/a6a15f6051f8.png‘;

Dann sollte der Fehler nicht mehr auftreten, und Du kannst Dich erstmal um das erste Problem kümmern, nämlich, warum JS nicht druckt.

Hallo phospek,

ich kenne mich mit VB nicht aus aber du versuchst eine VB-Funktion über Javascript zu aktivieren.

Folgendes Bsp. funktioniert bei mir. Wenn das Bild geladen wird, wird es automatisch gedruckt.

sub Print()
OLECMDID_PRINT = 6
OLECMDEXECOPT_DONTPROMPTUSER = 2
OLECMDEXECOPT_PROMPTUSER = 1
call WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,1)
End Sub
document.write „<object id=‚WB‘ width=‚0‘ height=‚0‘ classid=‚CLSID:8856F961-340A-11D0-A96B-00C04FD705A2‘></object>“
http://www.sparen-ab-werk.de/WebRoot/Store4/Shops/62…" onload=„Print()“ width=„100“ height=„132“>

ActiveX muss dafür erlaubt sein.
Schau dir das Bild hier an: http://i.stack.imgur.com/yOrrl.png

Viele Grüße

Hallo,

Da PHP serverseitig und Javascript clientseitig ausgeführt wird, kann es nicht vorkommen, dass Javascript „zu früh ausgeführt“ wird. Leider kenne ich mich mit VBScript nicht aus und kann dir da nicht weiterhelfen (es ist auf jeden Fall kein Javascript).

Dass der Browser überhaupt ein Drucken ohne Nachfrage beim Benutzer zulässt, halte ich für sehr problematisch und bin mir nicht sicher, ob das mit einem aktuellen Internet Explorer überhaupt funktionieren kann.

Hoffentlich kann jemand anderes deine Frage beantworten.

Hallo,+
versuche doch mal den Code in eine Funktion zu packen und ein onLoad-Event in das Body-Tag zu schreiben.
DAnn wird JavaScript erst nach dem vollständigen Laden der Seite ausgeführt.

Gruß, Regina

Also mit dem Code von Paul Geisler funktioniert das ganze einwandfrei.
Ich übernehme das Bild weiterhin folgendermaßen:

<?php $bild=$_REQUEST['druckbild'];
if (file\_exists($bild)) { echo " ![](\"$bild\")"; } ?\> Dadurch wird der Druckdialog umgangen (was in meiner internen Nutzung Benutzerfreundlich ist) und das Bild auf dem Standartdrucker gedruckt. Warum das andere nicht funktioniert hat ist mir zwar immernoch nicht ganz schlüssig - weil wenn ich den Pfad manuell einschreibe auch das Script funktioniert hat. Nur die Übernahme via php nicht. Ich bedanke mich für all die ganzen guten Hinweise und Anregungen!

Wie wäre es, die java-script erst auszuführen, wenn die Datei fertig geladen ist? Also auslagern in eine function und Aufruf mittles onLoad im Body-TAG?

Hallo phospek,

ich glaube, man kann nicht immer sicher sein, dass die Seite am Ende des Quellcodes auch geladen ist.
Vielleicht könntest Du jQuery benutzen. Meiner Erinnerung nach wird die im Fuss eingebaute Funktion auch nur dann aufgerufen, wenn die Seite wirklich aufgebaut ist.

Gruß, Frank