Thomas Mirke: Text anfügen - Knoten im Kopf

Möglicherweise wird wieder jemand 'Müll' schreien, aber ich versuche es trotzdem. Folgende Funktion erzeugt dynamisch ein Fenster mit einer Objekt-Deklaration, die dort mit den vorgegebenen Parametern per Link gestartet werden soll. Das funktioniert leider nur, wenn man den HTML Help Compiler benutzt, da etliche Methoden, darunter auch die Click()-Methode des hhctrl's nur in kompilierten chm-Dateien ablaufen.
Es ist leider so, daß die Parameter des hhctrl's teilweise nicht zur Laufzeit neu zugewiesen werden können. Geht nicht, daher die Idee, den zur Laufzeit ermittelten Pfad zusammen mit der kompletten Objekt-Deklaration zur Laufzeit neu per writeln auszugeben und das Objekt dann mit einem Link und der im Objekt implementierten Click()-Methode zu starten.

Könnte ich es erreichen, den hier mit writeln ausgegebenen "Sermon" einfach an die aktuelle Datei anzuhängen ohne zu löschen? Leider gibt es eine document.insert oder document.append-Methode meines Wissens nicht. Layer (visible/invisible) helfen nicht weiter, da diese ja ebenfalls "all[] schon da" sind, wenn das Dokument geladen wird.

In meinen Büchern und im Forum habe ich hierzu nichts entdeckt, echt, ich habe 1 Stunde gesucht. Danke im Voraus!!

function aktpath(ziel)
{
var wert=",hh.exe,"+pfadzuweisen()+ziel;
breite=600;
hoehe=250;
with (document)
  {
  open();
  writeln('<html><HEAD>');
  writeln('<link rel="stylesheet" type="text/css" href="css/hilfe.css">');
  writeln('</HEAD>');
  // Hier folgen die Objekte!
  writeln('<OBJECT ID="chm" type="application/x-oleobject" CLASSID="CLSID:ADB880A6-D8FF-11CF-9377-00AA003B7A11">');
  writeln('<PARAM NAME="Command" VALUE="ShortCut">');
  writeln('<PARAM NAME="Item1" VALUE="'+wert+'">');
  writeln('</OBJECT>');
  // Ende der Objektliste!
  writeln('<body>');
  writeln('<h1>Verzweigen Sie zu anderen Hilfe-Themen:</h1><h3><p>');
  // Hier folgen die Links!! //
  writeln('<blockquote><a href="javascript:chm.Click()">Häufig gestellte Fragen</a></h3></body></html>');
  // Ende der Links //
  close();
  }
}

  1. Hallo Thomas

    Leider gibt es eine document.insert oder document.append-Methode meines Wissens nicht.

    Doch - gibt es. DHTML nach MS-IE-Syntax erlaubt beliebiges nachtraegliches Einfuegen, Aendern und Loeschen von Inhalten, an beliebigen Stellen im Tag-Baum. Und da die in deinem Beispiel genannte Objektreferenz und die CHM-Technologie eh den MSIE voraussetzen, kannst du die denke ich auch benutzen. Es handelt sich um:

    document.all.idName.innerHTML (<../../tecbba.htm#a10>)
    document.all.idName.innerText (<../../tecbba.htm#a11>)
    document.all.idName.outerHTML (<../../tecbba.htm#a21>)
    document.all.idName.outerText (<../../tecbba.htm#a22>)
    document.all.idName.insertAdjacentHTML() (<../../tecbba.htm#a32>)
    document.all.idName.insertAdjacentText() (<../../tecbba.htm#a33>)

    viele Gruesse
      Stefan Muenz

    1. Knoten geplatzt, vielen Dank!!

      Habe jetzt folgende Lösung zur dynamischen Ansteuerung des hhctrls entwickelt, die ich dem Forum hiermit zur Verfügung stellen möchte.

      Sie ist insofern ausbaufähig, als sich alle Parameter des hhctrl auf diese Weise dynamisch beeinflußen lassen. Jeweils wird bei jedem Aufruf der Funktion "Aufruf(ziel)" die Instanz "chm" des Controls mit neuen, gerade benötigten Parametern geschaffen. Vorausgesetzt wird in diesem Beispiel, daß sich alle Hilfedateien im gleichen Verzeichnis befinden. Funktioniert (wegen der Click-Methode) ausschließlich in kompilierter chm-Datei ...

      1. Im Scriptteil:

      function Aufruf(ziel)
      {
      var wert=",hh.exe,"+pfadzuweisen()+ziel;
      var NeuesObjekt="<OBJECT ID='chm' type='application/x-oleobject' CLASSID='CLSID:ADB880A6-D8FF-11CF-9377-00AA003B7A11'>";
      NeuesObjekt+="<PARAM NAME='Command' VALUE='ShortCut'>";
      NeuesObjekt+="<PARAM NAME='Item1' VALUE='"+wert+"'>";
      NeuesObjekt+="</OBJECT>";
      document.all.objekte.innerHTML = NeuesObjekt;
      chm.Click();
      }

      function pfadzuweisen()
      {
      pfad = window.location.pathname;
      var bslash="\";
      var such=":"+bslash;
      var von=pfad.indexOf(such)-1;
      var bis = pfad.lastIndexOf(bslash);

      if (bis != -1)  
      

      {
        var hilf = pfad.substr(von,bis);
        var bis = hilf.lastIndexOf(bslash)+1;
        var hilf2 = hilf.substr(0,bis);
        }
      pfad=hilf2;
      return pfad;
      }

      2. Im Html-File, am besten am Ende:

      <p id="objekte"></p>

      3. Im Html-File irgendwo, wo benötigt:

      <p align="left">Antworten auf immer wieder
            gestellte Fragen zu ... haben wir unter dem Thema <a href="javascript:Aufruf('faq.chm')">"Häufig
            gestellte Fragen"</a> zusammengestellt.</p>

      Viel Spaß - wer's gebrauchen kann. Und vielen Dank an Stefan Münz.

      Grüße von Thomas