Tobi Brandt: Drucken ohne Browserbutton

Lob, Lob, Lob!
Das Forumsarchiv ist geil. onFrage="tippen()"
function tippen(){
   return antwort;
}
oder so.
Zum Thema:
Die Geschichte, durch einen <input type ="button" value="Drucken"> das Browserfenster auszudrucken funktioniert ja ganz klasse. Den Code (welcher gleich vier Mal im Archiv zu finden ist)habe ich mir kopiert:

<script language="JavaScript">
function Drucken()
{
if(document.layers) /* Abfrage auf Netscape 4 */
   self.print();
if(document.all) /* Abfrage auf MSIE 4 */
{
  self.focus();
  var OLECMDID_PRINT = 6;
  var OLECMDEXECOPT_DONTPROMPTUSER = 2;
  var OLECMDEXECOPT_PROMPTUSER = 1;
  var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0
CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
  document.body.insertAdjacentHTML('beforeEnd',WebBrowser);
  WebBrowser1.ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER);
  WebBrowser1.outerHTML = ''
}
}
</script>

Aber ich möchte nicht so einer sein, der das  einfach nur runterschluckt.

Meine Hauptfrage ist also: Zeile 18 (ca.):
Was ist dieses ExecWB eigentlich für 'ne Methode. Die ist in keinen noch so fetten DHTML Büchern beschrieben. Ist das überhaupt DHTML? Kann mir jemand erklären, für was das Ding gut ist (außer damit das Browserfenster auszudrucken...) oder mir eine url nennen, wo mehr drüber steht?

Schommal danke,

Tobi

  1. CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
      document.body.insertAdjacentHTML('beforeEnd',WebBrowser);
      WebBrowser1.ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER);
      WebBrowser1.outerHTML = ''

    Die class-Id deutet schwer auf ein ActiveX-Control hin.
    (brrrr) :) also duerfte execWeb auf dort hingehoeren.

    Gruesse
    Wilhelm

    1. Hi,

      CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
        document.body.insertAdjacentHTML('beforeEnd',WebBrowser);
        WebBrowser1.ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER);
        WebBrowser1.outerHTML = ''

      Die class-Id deutet schwer auf ein ActiveX-Control hin.
      (brrrr) :) also duerfte execWeb auf dort hingehoeren.

      Das CLASSID bezieht sich auf das sog. WebBrowser Control, ein Teil vom IE selbst. Näheres gibt's auf http://msdn.microsoft.com/workshop/browser/WebBrowser/WebBrowser.asp.

      Übrigens: ab IE5 funktioniert auch die Methode window.print(), dann erscheint aber zuerst der Standard-Druckdialog.

      Gruß,
      UlfL

      1. Hi Ulf,

        Übrigens: ab IE5 funktioniert auch die Methode window.print(),

        Sicher? In der Doku steht ab IE4. Aber ich habe gerade erst mit einem Kollegen einen Fehler in der MFC-Doku aufgespürt, hat also nicht viel zu sagen.

        Gruß,
        Martin

        1. Hi Martin,

          Übrigens: ab IE5 funktioniert auch die Methode window.print(),

          Sicher? In der Doku steht ab IE4.

          Sicher! window.print() funktioniert nicht in IE4. Schau mal: http://msdn.microsoft.com/workshop/essentials/whatsnew/whatsnew.asp

          Gruß,
          UlfL

  2. Hi Tobi,

    <grusel>

    Was ist dieses ExecWB eigentlich für 'ne Methode.

    Da muss ich ein bisschen ausholen. Der IE besteht zum größten Teil aus zwei COM-Objekten, dem MSHTML (parsing und rendering) und dem WebBrowser (navigation). Was der Anwender als IE sieht ist nur ein COM-Client, der diese beiden Objekte hostet.

    Der Name der Methode, jedenfalls die beiden letzten Buchstaben, deutet darauf hin, wozu sie gehört: zum WebBrowser. Noch genauer, sie gehört eigentlich zur C/C++-Schnittstelle. Und ganz genau: es gibt die JavaScript-Methode window.print(). Schmeiss den Krempel raus und ruf die Methode auf.

    Ist das überhaupt DHTML?

    Nein, das ist COM. Component Object Model, ein Modell für wiederverwertbare Objekte.

    oder mir eine url nennen, wo mehr drüber steht?

    http://msdn.microsoft.com/workshop/browser/webbrowser/reference/ifaces/IWebBrowser2/ExecWB.asp

    Viel Spass damit! Ich habe schon mal die C/C++-Schnittstelle vom MSHTML programmieren dürfen. Es war eines der grauenhaftesten Erlebnisse in meiner Programmierer-Laufbahn.

    Gruß,
    Martin