Reiner Wirth: Sound in frame stoppen

Hallo und guten Tag,

ich lade mit:

<script language="javascript">
function loadSound()
{
parent.soundfrm.location.href="soundname.html";
}
//-->

einen sound in ein frame mit dem Namen soundfrm und er spielt dort.
Jetzt möchte ich durch einen passendenden javascript-Befehl den sound stoppen.

Ich habe den frommen Wunsch, dass es etwas gibt wie parent.soundfrm.stop();

hab aber bisher keinen Erfolg gehabt mit dieser Idee.

Hat jemand einen Tipp für mich?

Vielen Dank schon mal im Voraus.

Reiner Wirth

  1. Hi,

    ich lade mit:
    parent.soundfrm.location.href="soundname.html";
    einen sound in ein frame

    anhand Deines Codes lässt sich das zwar nicht ausschließen, aber ich tippe doch eher, dass Du eine HTML-Ressource in den Frame lädst. Wozu eigentlich Frames?

    Ich habe den frommen Wunsch, dass es etwas gibt wie parent.soundfrm.stop();

    Damit würdest Du versuchen, ein Fenster zu stoppen. Many people tried to stop windows, but until now they all failed.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. ok,

      dann werde ich wohl mit einem »leeren« sound.html laden, damit mein anderer sound rausfliegt, das wollte ich eigentlich vermeiden, aber wenn den Experten auch nichts anderes einfällt als das, was ich vermeiden wollte, muss ich halt!!

      Schönen Abend

      Reiner Wirth

      1. Hallo Reiner,

        dann werde ich wohl mit einem »leeren« sound.html laden, damit mein anderer sound rausfliegt, das wollte ich eigentlich vermeiden, aber wenn den Experten auch nichts anderes einfällt als das, was ich vermeiden wollte, muss ich halt!!

        Wieso, ich habe dir doch beim letzten Mal schon eine andere Möglichkeit genannt.

        Gruß Gernot

    2. Ich habe den frommen Wunsch, dass es etwas gibt wie parent.soundfrm.stop();

      Damit würdest Du versuchen, ein Fenster zu stoppen. Many people tried to stop windows, but until now they all failed.

      ich will kein Fenster stoppen, sondern den Controller im frame beeinflussen, das kann ein QT-Controller oder Windoofs-Controller oder was auch immer sein. Es gibt doch parameter wie javascript=true in den Dingern, das muss doch für was gut sein. Der hübsche Controller hat doch einen Lautstärke-Fader mit stop-, Pause-, return-, etc-Buttons, um die gehts mir und um nichts anderes, quasi eine javascript-unterstützte remote-Steuerung eines Sound-Controllers, der auf einem .html-Dokument definiert ist zusammen mit einem bestimmten .wav, .mp oder sonstwas-File, der in dieser Seite eingebunden ist und in meiner Navigation in einem Frame als controller erscheint. Solche player-plugins gibt es auf allen Browsern, ich brauche dann auch kein Flash. Ja, das wärs.
      Vielleicht versteht mich ja jetzt jemand. Ich gebe die Hoffnung noch immer nicht auf.

      Thank you for cooperation,

      Reiner Wirth

      1. ich will kein Fenster stoppen, sondern den Controller im frame beeinflussen, das kann ein QT-Controller oder Windoofs-Controller oder was auch immer sein. Es gibt doch parameter wie javascript=true in den Dingern, das muss doch für was gut sein. Der hübsche Controller hat doch einen Lautstärke-Fader mit stop-, Pause-, return-, etc-Buttons, um die gehts mir und um nichts anderes, quasi eine javascript-unterstützte remote-Steuerung eines Sound-Controllers, der auf einem .html-Dokument definiert ist zusammen mit einem bestimmten .wav, .mp oder sonstwas-File, der in dieser Seite eingebunden ist und in meiner Navigation in einem Frame als controller erscheint. Solche player-plugins gibt es auf allen Browsern, ich brauche dann auch kein Flash.

        Du beschreibst doch die Situation sehr gut.

        Du kannst Plugins für den Sound tatsächlich oft mit JS steuern, sofern diese eine Schnittstelle anbieten. Den dazugehörigne Code findest du i.d.R. auf den Interneseiten des Herstellers. Es ist bei jedem anders.

        Du kannst dich aber auf keinen Fall darauf verlassen, dass ein Plugin vorhanden ist. Nur die Plugins für das wav Format und Flash sind recht weit verbreitet.

        Um überhaupt Zugriff auf das Pluginelement zu haben, kannst du ganz normal wie bei anderen Elementen, getElementById() (o.ä) nutzen.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. Hallo Struppi,

          Um überhaupt Zugriff auf das Pluginelement zu haben, kannst du ganz normal wie bei anderen Elementen, getElementById() (o.ä) nutzen.

          Ich glaube es hakt immer noch daran, dass Reiner sich schwertut, den Lesetipp zu Svens Artikel in die Praxis umzusetzen, den du ihm vor einem Monat gegeben hast.

          http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/

          Ich habe deshalb schnell mal eine Framesetvariante meines Beispiels vom vergangenen Monat gebastelt:

          http://www.lernspielwiese.de/sound/loopframeset.html

          Eigentlich ist alles gleich geblieben, nur dass sich die beiden Plugins einerseits und deren JavaScript-Steuerung andererseits nun auf zwei Frames verteilen und ich beim Script an ein paar Stellen "parent.musi" davor schreiben musste, "parent" für das übergeordnete Frameset und "musi", weil das der Name desjenigen Frames in diesem übergeordneten Frameset ist, in dem die Musik spielt, aber wem sage ich das? ;-)

          Gruß Gernot

          1. Ich glaube es hakt immer noch daran, dass Reiner sich schwertut, den Lesetipp zu Svens Artikel in die Praxis umzusetzen, den du ihm vor einem Monat gegeben hast.

            http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/

            das ist so nicht, lieber Gernot, die frames kann ich inzwischen bedienen,
            ich will jetzt nur die Steuerung des Controllers mit Javascript in den Griff bekommen möglichst mit startPlay() und stopPlay() oder ähnlich,

            ein Parameter enablejavascript="true" ist vorgesehen,
            dieser muss mit Leben erfüllt werden, das ist die Aufgabe!

            Ich habe deshalb schnell mal eine Framesetvariante meines Beispiels vom vergangenen Monat gebastelt:

            http://www.lernspielwiese.de/sound/loopframeset.html

            das will ich mir mal gleich anschauen, dazu muss ich aber wieder meine Dose einschalten, weil mein Safari-Browser dort scheitert.

            Gruß und Dank

            Reiner Wirth

        2. Guten Tag,

          falls noch jemand hier vorbeischaut, hätte ich noch eine Frage:

          angenommen ich kann auf derselben Seite in einer javascript-Methode einen Sound starten und stoppen, s.u.

          document.sound1.Play();
          document.sound1.Stop();

          das funktioniert jetzt!

          ich benutze hier Quicktime und mp4, das ist jetzt aber unwichtig

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
          <HTML><HEAD>
          <meta http-equiv="content-type" content="text/html;charset=utf-8">
          <TITLE>soundTest</TITLE>
          </HEAD>
          <BODY BGCOLOR="#ad1236">

          <object
          name="sound1"
          width="160"
          height="50"
          classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"
          codebase="http://www.apple.com/qtactivex/qtplugin.cab">
          <param name="bgcolor" value="#ad1236">
          <param name="volume" value="50">
          <param name="SRC" value="02.mp4">
          <param name="autoplay" value="false">
          <param name="controller" value ="true">
          <param name="kioskmode" value ="true">
          <param name="type" value="video/quicktime">
          <param name="pluginspage" value="http://www.apple.com/quicktime/download/index.html">

          <embed name="sound1" width="200" height="50" src="02.mp4" type="video/quicktime" autoplay="false" controller="true" kioskmode="true"
          enablejavascript="true" pluginspage="http://www.apple.com/quicktime/download/index.html" volume="50" bgcolor="#ad1236"></embed>
          </OBJECT>

          <a href="javascript:document.sound1.Play();">Abspielen</a>
          <a href="javascript:document.sound1.Stop();">Anhalten</a>

          </BODY>
          </HTML>

          wie kann ich von einer anderen Seite aus über getElementById
          den Namen "sound1" ermitteln und dort über einen Javascript-Befehl

          document.sound1.Play();
          document.sound1.Stop();

          diesen Sound starten und stoppen? Dann hätte ich meine Traumlösung

          Ich habe alles mögliche probiert!
          Ich fürchte, ich habe getElementById noch nicht verstanden.

          Vielen Dank

          Gruß Reiner Wirth

          1. Ich habe alles mögliche probiert!

            Aber nicht die Artikel gelesen die dir schon mehrfach gezeigt wurden, da steht alles was du Wissen musst.

            Ich fürchte, ich habe getElementById noch nicht verstanden.

            Damit hat es nichts zu tun

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. Ich fürchte, ich habe getElementById noch nicht verstanden.
              Damit hat es nichts zu tun
              Struppi.

              ich wollte eigentlich nur wissen, was Du mit Deinem Vorschlag:

              Um überhaupt Zugriff auf das Pluginelement zu haben, kannst du ganz normal wie bei »» anderen Elementen, getElementById() (o.ä) nutzen.
              Struppi.

              meintest. Es läuft ja alles sonst wunderbar.

              Reiner

              1. Ich fürchte, ich habe getElementById noch nicht verstanden.
                Damit hat es nichts zu tun
                Struppi.

                ich wollte eigentlich nur wissen, was Du mit Deinem Vorschlag:

                Deine Frage klang anders, du hattest gefragt wie du von einer anderen Seite aus darauf zugreifen kannst.

                Um überhaupt Zugriff auf das Pluginelement zu haben, kannst du ganz normal wie bei »» anderen Elementen, getElementById() (o.ä) nutzen.

                var obj = document.getElementById('sound');
                obj.Play();
                ...

                Dazu muss das Element natürlich eine ID haben.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. var obj = document.getElementById('sound');
                  obj.Play();
                  ...

                  Dazu muss das Element natürlich eine ID haben.

                  Struppi.

                  Mein Element hat ja eine ID, wenn name="sound1" eine ID ist, was ich annehme. Mein Problem ist aber doch, daß die Seite sound1.html jetzt in dem frame geladen ist.

                  Ist sie denn dann auch Bestandteil der aktuellen Seite (frameset) und kann dort gefunden werden?

                  Nicht böse sein und vielen Dank für die Hilfe.

                  Reiner

                  1. Mein Element hat ja eine ID, wenn name="sound1" eine ID ist, was ich annehme. Mein Problem ist aber doch, daß die Seite sound1.html jetzt in dem frame geladen ist.

                    Nein, eine id ist eine id, das ist eine Name
                    http://de.selfhtml.org/html/attribute/allgemeine.htm

                    Ja, dein Problem ist das Frameset, dazu hat dir Gernot schon einen Link gezeigt.

                    Ist sie denn dann auch Bestandteil der aktuellen Seite (frameset) und kann dort gefunden werden?

                    Nein

                    Struppi.

                    --
                    Javascript ist toll (Perl auch!)
                    1. Ja, dein Problem ist das Frameset, dazu hat dir Gernot schon einen Link gezeigt.

                      Hallo, diesen wirklich schönen Artikel habe ich jetzt als Hausaufgabe gemacht und kann jetzt mit

                      var frameuri=top.soundfrm.location.href;

                      die aktuelle URI festnageln, aber jetzt müßte ich noch Play() und Stop() darauf anwenden können und schon steh ich wieder auf dem Schlauch.

                      ich dachte zunächst an frameuri.sound.Play(); aber leider... Stille im Karton

                      seid ihr so lieb und helft mir noch mal?

                      ich habe sogar noch eine id=sound in die sound-Seite geschrieben:

                      <object id="sound"
                      name="sound1"
                      width="160"
                      height="50"
                      classid="…
                      usw.

                      das wird aber auch nichts helfen für getElementById, oder doch?

                      Gruß Reiner Wirth

                      1. Hallo, diesen wirklich schönen Artikel habe ich jetzt als Hausaufgabe gemacht und kann jetzt mit

                        var frameuri=top.soundfrm.location.href;

                        die aktuelle URI festnageln, aber jetzt müßte ich noch Play() und Stop() darauf anwenden können und schon steh ich wieder auf dem Schlauch.

                        Das sind doch Fortschritte ;-)

                        ich dachte zunächst an frameuri.sound.Play(); aber leider... Stille im Karton

                        Funktionen und Objekte sind an bestimmte übergeordnete Objekte gebunden (ausser window) und nicht an die URL

                        sound ist bei dir Teil des Dokumentes, also wäre hier (wenn 'sound' der Name wäre, er ist aber sound1) top.soundfrm.document.sound richtiger

                        ich bin immer aber nicht sicher ob du object Elemente über den Namen ansprechen kannst, daher nutze besser getElementById.
                        Diese Funktion ist ebenfalls Teil des Dokumentes.

                        ich habe sogar noch eine id=sound in die sound-Seite geschrieben:

                        <object id="sound"
                        name="sound1"
                        width="160"
                        height="50"
                        classid="…
                        usw.

                        das wird aber auch nichts helfen für getElementById, oder doch?

                        Natürlich:
                        var obj = top.soundfrm.document.getElementById( 'sound');
                        ...
                        obj.Play();

                        Struppi.

                        --
                        Javascript ist toll (Perl auch!)
                        1. Natürlich:
                          var obj = top.soundfrm.document.getElementById( 'sound');
                          ...
                          obj.Play();

                          Danke, das ist die Erlösung!!!!

                          Ich habe mir auch Gernots geniales frameset angesehen, leider verstehe ich davon nur einen Bruchteil und ich kann sicher davon noch sehr viel lernen.

                          Warum seid ihr denn alle soooo gut?

                          Das hat mir wirklich geholfen.
                          Vielen, vielen Dank und einen wunderschönen Tag.

                          Liebe Grüße aus Berlin von Reiner

  2. n'abend,

    wie Cheatah schon sagte "startest" du keinen Sound mit diesem Befehl. Du lädst eine HTML-Datei in einem Frame.

    <script language="javascript">
    function loadSound()
    {
    parent.soundfrm.location.href="soundname.html";
    }
    //-->

    analog zu deinem "Start", könnte ein möglicher "Stop" folgendermaßen aussehen:

    function stopSound()  
    {  
      parent.soundfrm.location.href="keinsound.html";  
    }
    

    hierzu müsstest du eine (leere?) HTML-Datei names keinsound.html anlegen.

    Javascripts sollten (nein, müssen) wie folgt eingebunden werden:

    <script type="text/javascript">  
    /* hier dein code */  
    </script>
    

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
  3. Hallo und guten Tag,

    es hat zwar nichts mit meinem inzwischen dank eurer Hilfe gelösten sound-Problems zu tun, ich wage aber nicht, einen neuen thread zu eröffnen.

    Ich habe in meiner Seite einen weiteren frame ”navi“, er enthält ein pulldown-Menu:

    <SELECT  onchange="if(this.form.Horbeispiele.options[this.form.Horbeispiele.selectedIndex].value !='') parent.frames['inhalt'].location.href = this.form.Horbeispiele.options[this.form.Horbeispiele.options.selectedIndex].value" csmup="c16ce33f15">
    <OPTION value="titelblatt.html">H&ouml;rbeispiele zu den Autographen
    <OPTION value="inhalt.html#anchor2">1) Grabmusik KV 42 (35a): Arie &#132;Felsen, spaltet euren Rachen&#147;
    <OPTION value="inhalt.html#anchor3">2) Sinfonie D-Dur KV 48: 1. Satz Allegro
    ...
    usw
    ...
    <OPTION value="inhalt.html#anchor20">19) &#132;Bella mia fiamma, addio &#150; Resta, oh cara&#147;. Szene und Arie f&uuml;r Sopran KV 528
    <OPTION value="inhalt.html#anchor21">20) Zw&ouml;lf Menuette f&uuml;r Orchester KV 585: Nr. 1&#150;4
    </SELECT></TD>

    mit:

    function pullDown(ind) {
    top.navi.document.form.Horbeispiele.options.selectedIndex = ind;
    }

    versuche ich nun, im pulldown-Menu die Anzeige zu aktualisieren, der einem neuen Inhalt entspricht, der aus Sprüngen an andere Positionen erfolgt, die nicht über das pulldown-Menu verursacht wurden. Meine Inhaltsseite wird über Anker mit den Namen anchor02…anchor21 umpositopniert.

    In der javascript-Zeile steckt leider ein Fehler, den ich nicht finde.

    Für Hilfe wäre ich dankbar

    Gruß Reiner Wirth

    1. <SELECT  onchange="if(this.form.Horbeispiele.options[this.form.Horbeispiele.selectedIndex].value !='') parent.frames['inhalt'].location.href = this.form.Horbeispiele.options[this.form.Horbeispiele.options.selectedIndex].value" csmup="c16ce33f15">

      Und das Element Horbeispiele ist wo?
      Fall es das selectfeld selber sein soll, dann reicht auch:
      <SELECT  onchange="if(this.options[this.selectedIndex].value !='') parent.frames['inhalt'].location.href = this.options[this.selectedIndex].value" csmup="c16ce33f15">

      function pullDown(ind) {
      top.navi.document.form.Horbeispiele.options.selectedIndex = ind;

      top.navi.document.form.Horbeispiele.selectedIndex = ind;

      Struppi.

      --
      Javascript ist toll (Perl auch!)
      1. Und das Element Horbeispiele ist wo?

        in der navi.html, die wird in den frame "navi" der index.html (frameset) geladen.

        code frame.html:
        <html>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <TITLE>Mozart-Autographen frameset</TITLE>
        <FRAMESET Rows="50,*" frameborder="no" border=0 frameborder=0 framespacing=0>
        <FRAMESET cols="*,240" frameborder="no" border=0 frameborder=0 framespacing=0>
        <FRAME Name="navi" SRC="Anfangsebene/navi.html" Scrolling="no">
        <FRAME Name="soundfrm" src="Sound/_wav/stille.html" scrolling="no" marginwidth="0" marginheight="0">
        </FRAMESET>
        <FRAME Name="inhalt" SRC="Anfangsebene/titelblatt.jpg" Scrolling="auto" marginwidth="0" marginheight="0">
        </FRAMESET>

        code navi.html:
        <html><head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <TITLE>Navigation</TITLE>
        <STYLE type="text/css">
        <!--
        select { font-family:arial,verdana,arial narrow,helvetica; background-color:#eceded; }
        //-->
        </STYLE>
          <csactions>
           <csaction name="c16e60e22" class="Call Function" type="onevent" val0="stopSound" val1=""></csaction>
          </csactions>
          <csscriptdict import>
           <script type="text/javascript" src="../GeneratedItems/CSScriptLib.js"></script>
          </csscriptdict>
          <csactiondict>
           <script type="text/javascript"><!--
           CSAct[/*CMP*/ 'c16e60e22'] = new Array(CSCallFunction,'stopSound','');
           // --></script>
          </csactiondict>
          <script language="javascript">
        function stopSound() {
        var obj = top.soundfrm.document.getElementById('sound');
        obj.Stop();
        }
        //--></script>
        </HEAD>
        <BODY BGCOLOR="#AD1236">
        <FORM>
        <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>
        <tr valign="middle">
        <td valign=middle align=center width="120"><a title="Hier klicken!" href="impressum.html" target="inhalt"><img src="../gifsButtons/impressum.gif" alt="" height="24" width="80" border="0"></a></td>
        <td valign=middle align=left><img src="../gifsButtons/bitte_waehlen.gif" alt="" height="24" width="90" border="0"></td>
        <td valign=middle align=left>
        <SELECT onclick="CSAction(new Array(/*CMP*/'c16e60e22'));return CSClickReturn()"  onchange="if(this.options[this.selectedIndex].value !='') parent.frames['inhalt'].location.href = this.options[this.selectedIndex].value" csclick="c16e60e22" csmup="c16ce33f15">
        <OPTION value="titelblatt.html">H&ouml;rbeispiele zu den Autographen
        <OPTION value="inhalt.html#anchor2">1) Grabmusik KV 42 (35a): Arie &#132;Felsen, spaltet euren Rachen&#147;
        <OPTION value="inhalt.html#anchor3">2) Sinfonie D-Dur KV 48: 1. Satz Allegro
        usw.
        usw.
        <OPTION value="inhalt.html#anchor20">19) &#132;Bella mia fiamma, addio &#150; Resta, oh cara&#147;. Szene und Arie f&uuml;r Sopran KV 528
        <OPTION value="inhalt.html#anchor21">20) Zw&ouml;lf Menuette f&uuml;r Orchester KV 585: Nr. 1&#150;4
        </SELECT></TD>
        <td valign=middle align=right width="150"><img src="../gifsButtons/musiksteuerung.gif" alt="" width="100" height="24" border="0"></td>
            </tr>
        </TR>
        </TABLE>
        </BODY>
        </HTML>

        die inhalt.html erspare ich euch, aus hier heraus erfolgt der Aufruf zur Aktualisierung des pulldown-Menus

        function pulldownRenew() {
        top.navi.document.form.Horbeispiele.selectedIndex = ind;
        }

        vielleicht habe ich Dich falsch verstanden.

        Gruß Reiner

        1. Und das Element Horbeispiele ist wo?

          in der navi.html, die wird in den frame "navi" der index.html (frameset) geladen.

          code frame.html:

          Das ist kein Element mit dem Namen Horbeispiele

          function pulldownRenew() {
          top.navi.document.form.Horbeispiele.selectedIndex = ind;
          }

          vielleicht habe ich Dich falsch verstanden.

          Offensichtlich um ein Element: top.navi.document.form.Horbeispiele anzusprechen, muss es auch vorhanden sein.

          Struppi.

          --
          Javascript ist toll (Perl auch!)
          1. Das ist kein Element mit dem Namen Horbeispiele

            Könntest Du bitte so lieb sein, mir zu sagen, wie ich das Element deklariere?
            Mein Code ist doch jetzt veröffentlicht.

            Es muss sicher in nav.html passieren. Dort wurde ja in meiner Version:

            <SELECT onmouseup="CSAction(new Array(/*CMP*/'514d3e63'));return true;" name="Horbeispiele" onchange="if(this.form.Horbeispiele.options[this.form.Horbeispiele.selectedIndex].value !='') parent.frames['inhalt'].location.href = this.form.Horbeispiele.options[this.form.Horbeispiele.options.selectedIndex].value" csmup="514d3e63">

            Horbeispiele definiert, oder nicht?

            Dann habe ich Deine vorgeschlagene Vereinfachung eingeführt mit:

            <SELECT  onchange="if(this.options[this.selectedIndex].value !='') parent.frames['inhalt'].location.href = this.options[this.selectedIndex].value" csmup="c16ce33f15">

            damit ist name="Horbeispiele" verloren gegangen, ich probier mal, Name=  wieder einzusetzen. Das könnte die Lösung sein.

            Es müßte dann heißen:

            <SELECT  name="Horbeispiele" onchange="if(this.options[this.selectedIndex].value !='') parent.frames['inhalt'].location.href = this.options[this.selectedIndex].value" csmup="c16ce33f15">

            Eine andere jetzt wichtigere Frage ist, wie kann ich im pulldown-Menu erreichen, dass zusätzlich zum Ansprung des Ankers ein parent.soundfrm.location.href="irgendein_sound.html"; zum Laden des soundfiles im frame "soundfrm" erfolgen kann.

            Die Zeile im pulldown-Menu heißt ja jetzt:

            <OPTION value="inhalt.html#anchor3">2) Sinfonie D-Dur KV 48: 1. Satz Allegro

            da muss das parent.soundfrm.location.href="irgendein_sound.html"; rein, denke ich. Ich weiß nur nicht, wie das formuliert wird, sorry.

            Da ich jetzt die Sounds dank eurer Hilfe so schön starten und stoppen kann, könnte ich so den sound (mit autostart="false" vorladen und bei Bedarf starten.

            Das wäre ganz wichtig für mich, weil die Nutzer dann auch vom Player aus starten können, wenn sie mein kleines Lautsprechersymbol auf der Seite für den Start nicht wahrnehmen.

            Danke vielmals für die Unterstützung

            Reiner

            1. Das ist kein Element mit dem Namen Horbeispiele

              Könntest Du bitte so lieb sein, mir zu sagen, wie ich das Element deklariere?
              Mein Code ist doch jetzt veröffentlicht.

              Es muss sicher in nav.html passieren. Dort wurde ja in meiner Version:

              <SELECT onmouseup="CSAction(new Array(/*CMP*/'514d3e63'));return true;" name="Horbeispiele" onchange="if(this.form.Horbeispiele.options[this.form.Horbeispiele.selectedIndex].value !='') parent.frames['inhalt'].location.href = this.form.Horbeispiele.options[this.form.Horbeispiele.options.selectedIndex].value" csmup="514d3e63">

              https://forum.selfhtml.org/?t=139548&m=908315
              dort war das Attribut name nicht deklariert

              Aber ich hatte dir bereits gezeigt dass du den gar nicht brauchst,
              https://forum.selfhtml.org/?t=139548&m=908219

              Dann habe ich Deine vorgeschlagene Vereinfachung eingeführt mit:

              <SELECT  onchange="if(this.options[this.selectedIndex].value !='') parent.frames['inhalt'].location.href = this.options[this.selectedIndex].value" csmup="c16ce33f15">

              Das war das Beispiel und das sollte auch funktionieren.

              damit ist name="Horbeispiele" verloren gegangen, ich probier mal, Name=  wieder einzusetzen. Das könnte die Lösung sein.

              Nein.

              Eine andere jetzt wichtigere Frage ist, wie kann ich im pulldown-Menu erreichen, dass zusätzlich zum Ansprung des Ankers ein parent.soundfrm.location.href="irgendein_sound.html"; zum Laden des soundfiles im frame "soundfrm" erfolgen kann.

              Die Zeile im pulldown-Menu heißt ja jetzt:

              <OPTION value="inhalt.html#anchor3">2) Sinfonie D-Dur KV 48: 1. Satz Allegro

              da muss das parent.soundfrm.location.href="irgendein_sound.html"; rein, denke ich. Ich weiß nur nicht, wie das formuliert wird, sorry.

              du kannst in einem Frame ja nicht zwei verschiedene Seiten laden was hast du vor?

              Da ich jetzt die Sounds dank eurer Hilfe so schön starten und stoppen kann, könnte ich so den sound (mit autostart="false" vorladen und bei Bedarf starten.

              Das geht nur wenn es das Plugin kann (z.b. das Quicktime Plugin tut das soweit ich weiß)

              Struppi.

              --
              Javascript ist toll (Perl auch!)
              1. »» »» <SELECT  onchange="if(this.options[this.selectedIndex].value !='') parent.frames['inhalt'].location.href = this.options[this.selectedIndex].value" csmup="c16ce33f15">

                Das war das Beispiel und das sollte auch funktionieren.

                so leid es mir tut, es funktioniert so nicht, weil ich doch vom anderen Frame aus aufrufen muß mit
                top.navi.document.form.Horbeispiele.selectedIndex = ind;

                drehen wir uns jetzt im Kreis?

                vielleicht nochmal von vorn:

                Ich habe eine Startseite, das frameset mit
                1. "navi" mit dem pulldown-Menu (beschrieben in navi.html),
                2. "soundfrm" mit dem Soundplayer (hier werden die Sounds geladen) und
                3. "inhalt" mit inhalt.html geladen (sehr lange Seite mit 20 Bildschirminhalten jeweils durch Anker positioniert, jeder Bildschirminhalt (ich nenne sie mal Beispiel) zeigt eine andere Handschrift.
                Die Auswahl erfolgt am pulldown-Menu. Man kann also durch select eines von 20 Beispielen (Mozart-Handschriften) aufrufen. Nach Auswahl und Click bleibt das pulldown-Menu  dann an der Stelle mit der Beispielnummer stehen und auf dem Bildschirm (frame "Inhalt) erscheint das gewünschte Beispiel. Nun kann der Sound am unteren Rand im "Inhalt" durch Click auf ein Lautsprechersymbol gestartet werden.
                Bei neuer Betätigung der pulldown-Auswahl zu einem anderen Beispiel wird nun dank eurer Hilfe der Sound gestoppt und ein neues Beispiel auf dem Bildschirm gezeigt. Das pulldown zeigt immer die aktuelle Auswahl an.

                aber: Nun gibt es auf meiner Inhaltsseite auch buttons, mit denen ich unabhängig vom pulldown-Menu zu anderen Beispielen wechseln kann (Beispiel vorher und Beispiel nachher), der Nutzer hat sich das gewünscht, weil die Rollkugel sehr groß ist und Benutzer sich mit der Bedienung schwer tun. Wenn der User nun in dieser anderen Navigation bewegt, stimmt die Anzeige im pulldown nicht mit dem dann erreichten Beispiel überein. Ich habe mich bisher damit beholfen, dass ich in "navi" jeweils navi.html erneut lade, dodass das pulldown-Menu wieder den 1. Eintrag "Beispiel" (das müßte Index 0 sein) anzeigt. Dabei kann ich auch bleiben.
                Warum das mit Deinem Vorschlag nicht geht, weiß ich nicht.

                du kannst in einem Frame ja nicht zwei verschiedene Seiten laden was hast du vor?

                Ich will ein autostart="false" sound-File immer dann schon in den frame "soundfrm" laden, wenn im pulldown-Menu ein neues Beispiel aufgerufen wird (also im frame "inhalt" ein neues Beispiel angezeigt wird). Hier müssen 2 frames geändert werden durch einen Klick und ich habe schon eine Seite bei euch gefunden (http://de.selfhtml.org/javascript/beispiele/zweiframes.htm ein bisschen gruselig für einen Anfänger), die ich wohl durcharbeiten muß, wenn ich weiterkommen möchte, es sei denn, es gibt in

                <OPTION value="inhalt.html#anchor3">2) Sinfonie D-Dur KV 48: 1. Satz Allegrot

                eine einfache Lösung gibt.
                In dieser Variante sind bei Auswahl der Beispiele jeweils die passenden Sounds schon geladen und können entweder vom Player im frame "soundfr" oder durch Click auf ein kleines Lautsprechersymbol im frame "inhalt" gestartet werden, ansonsten startet der Benutzer vom player aus immer das vorherige Beispiel.

                (leider ein Roman geworden, pardon)

                Gruß Reiner

    2. Hallo Reiner,

      function pullDown(ind) {
      top.navi.document.form.Horbeispiele.options.selectedIndex = ind;
      }

      versuche ich nun, im pulldown-Menu die Anzeige zu aktualisieren, der einem neuen Inhalt entspricht, der aus Sprüngen an andere Positionen erfolgt, die nicht über das pulldown-Menu verursacht wurden. Meine Inhaltsseite wird über Anker mit den Namen anchor02…anchor21 umpositopniert.

      In der javascript-Zeile steckt leider ein Fehler, den ich nicht finde.

      Nein, die Javascriptzeile sieht so ganz in Ordnung aus; die Frage ist nur, wie du diese Funktion aufrufst; habe ich dich richtig verstanden; du willst also, dass sich auch beim Scrollen der Seite mit den vielen Ankern das Pulldownmenü auf den Anker aktualisiert, der gerade ins Blickfeld gerät?

      Das kannst du nur, indem du onscroll oder in einem ständigen Prüfintervall die aktuelle  Scrollposition des Dokuments mit der absoluten, auf den Viewport bezogenen offsetHeight des jeweiligen Ankers vergleichst.

      Gruß Gernot

      1. Nein, die Javascriptzeile sieht so ganz in Ordnung aus;

        …hab ich auch gedacht und bin ganz enttäuscht. Es tut sich nichts in der Anzeige, die steht und steht...

        »»die Frage ist nur, wie du diese Funktion aufrufst; habe ich dich richtig verstanden; du willst also, dass sich auch beim Scrollen der Seite mit den vielen Ankern das Pulldownmenü auf den Anker aktualisiert, der gerade ins Blickfeld gerät?

        ganz so konfortabel muss es nicht sein, es reicht mir, wenn sich das pulldown-down Menu auf die aktuelle Position umstellt, wenn ich durch einen Sprung von der innerhalb der Inhalstsseite auf einen anderen Ausschnitt (Beispiel) durch onClick springe.

        Die pulldown-Anzeige soll aktualisiert werden. Im Moment lade ich einfach das pulldown-Menu neu und lande dann halt in der Anfangszeile. Damit kann ich leben. Ich bin halt leider ein Perfektionist.

        Danke für die Hilfe.

        Übrigens. lieber Gernot, wollte ich Dir meine Bewunderung extra nochmal ausdrücklich rüber bringen für Dein schönes und lehrreiches Sound-Beispiel.

        Gruß Reiner

        1. Hallo Reiner,

          …hab ich auch gedacht und bin ganz enttäuscht. Es tut sich nichts in der Anzeige, die steht und steht...

          Weil Struppi natürlich mit dem überzähligen .options Recht hatte und ich Tomaten auf den Augen.

          dass sich auch beim Scrollen der Seite mit den vielen Ankern das Pulldownmenü auf den Anker aktualisiert, der gerade ins Blickfeld gerät?

          ganz so konfortabel muss es nicht sein, es reicht mir, wenn sich das pulldown-down Menu auf die aktuelle Position umstellt, wenn ich durch einen Sprung von der innerhalb der Inhalstsseite auf einen anderen Ausschnitt (Beispiel) durch onClick springe.

          Ich habe mich mal an der komfortablen Variante versucht, die auch deine Zwecke abdecken sollte. Ob das in wirklich allen wichtigen Browsern funktioniert, ist aber fraglich.

          Für Feedback, ob es z.B. auch am Mac geht, wäre ich dankbar:

          http://lernspielwiese.de/scroll/ankerframeset.html

          Auf folgender Seite gibt es ja schon eine Übersicht über das Kuddelmuddel, das da je nach Browser und Doctype herrscht:

          http://www.quirksmode.org/js/doctypes.html

          Übrigens. lieber Gernot, wollte ich Dir meine Bewunderung extra nochmal ausdrücklich rüber bringen für Dein schönes und lehrreiches Sound-Beispiel.

          Danke! Ich hoffe, zum Lernen eignet sich auch mein neues Beispiel zur Koordination von Scrollposition und SelectedIndex einer Auswahlbox. Für mich war das jedenfalls der Fall.

          Gruß Gernot

          1. Ich habe mich mal an der komfortablen Variante versucht, die auch deine Zwecke abdecken sollte. Ob das in wirklich allen wichtigen Browsern funktioniert, ist aber fraglich.

            Für Feedback, ob es z.B. auch am Mac geht, wäre ich dankbar:

            http://lernspielwiese.de/scroll/ankerframeset.html

            Leider bin ich nicht in der Lage für eine Würdigung Deiner Arbeit geschweige denn einen Test für Mac und Safari zu veranstalten, weil ich nur den frameteil habe, die Quellfiles ankersteuerung:html und ankerseite.html fehlen mir oder habe ich sie auf der Spielwiese übersehen?

            das krieg ich:

            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
                    "http://www.w3.org/TR/html4/frameset.dtd">
            <html>
            <head>
            <title>Koordination von Sprungmarken und Selectbox</title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            <meta name="author" content="Gernot">
            <meta name="generator" content="Ulli Meybohms HTML EDITOR">
            </head>
            <frameset cols="100,*">
               <frame name="steuerung" src="ankersteuerung.html">
               <frame name="ankerseite" src="ankerseite.html">
            </frameset>
            </html>

            bis dann, Reiner

            1. Hallo Reiner,

              Leider bin ich nicht in der Lage für eine Würdigung Deiner Arbeit geschweige denn einen Test für Mac und Safari zu veranstalten, weil ich nur den frameteil habe, die Quellfiles ankersteuerung:html und ankerseite.html fehlen mir oder habe ich sie auf der Spielwiese übersehen?

              Das ist kurios, denn bei mir funktioniert das alles nicht nur lokal, sondern auch im Netz mit IE7, Firefox 2.0, Opera 9 und Netscape 7.1 unter Windows XP.

              Gruß Gernot

              1. Das ist kurios, denn bei mir funktioniert das alles nicht nur lokal, sondern auch im Netz mit IE7, Firefox 2.0, Opera 9 und Netscape 7.1 unter Windows XP.

                Du verstehst mich falsch, es funktioniert ja bei mir auch, aber ich habe nur den Quellcode vom frameset. Lass mich doch die anderen Quellen auch sehen.

                Gruß Reiner

                1. Hallo Reiner,

                  Du verstehst mich falsch, es funktioniert ja bei mir auch, aber ich habe nur den Quellcode vom frameset. Lass mich doch die anderen Quellen auch sehen.

                  Na den Rechtsklick mit der Maus wirst du doch kennen, um dir den Quellcode des jeweiligen Frames anzeigen zu lassen.

                  Gruß Gernot

                  1. Na den Rechtsklick mit der Maus wirst du doch kennen, um dir den Quellcode des jeweiligen Frames anzeigen zu lassen.

                    muss gestehen, kannte ich nicht, liegt wohl dran, dass wi alten Macianer immer nur eine Taste hatten und uns erst langsam dran gewöhnen und es auch gut finden, dass es auch den Rechtsklick gibt.

                    Jetzt hab ich die Quell-Files. Ich kann da nur ungläubig staunen, was ihr mit javascript machen könnt. Da brauch ich ziemlich lange, um das auch nur annähernd nachzuvollziehen. Chapeau!

                    Gruß Reiner

                  2. Hallo Gernot,

                    darf ich denn Deine geniale Ankersteuerung benutzen,
                    falls ja, müßteste Du mir bitte noch bei einer Frage helfen:

                    Du nutzt ja als »Anker« die id in:
                    <p id="Anker1">Anker 1 : Hier steht ganz sch&ouml………Text</p>

                    und greifst, wenn ichs recht verstehe darauf zu mit:
                    function anchChoice(obj) {
                       autoScroll=false;
                       with(obj){
                          form.action='ankerseite.html#' + options[selectedIndex].innerHTML;
                          form.submit();
                       }
                    }

                    und in deiner select-Box steht dann (ich kann nur ungläubig staunen):
                    <form method="get" name="myForm" target="ankerseite" action="#">
                          <select name="anchorChoice" onchange="anchChoice(this)">
                             <option>Anker1</option>
                             ……
                             <option>Anker19</option>
                          </select>

                    Wenn ich meine mir bekannten Anker mit den Bildern benutze:
                    <a id="anchor1" name="anchor1"></a><img src="../Bilder/TB01.jpg" width="1257" height="1004" align="top" usemap="#01" border="0"><map name="01"><area title="Gehe zu Beispiel 2" onclick=…><area title=…" href="../Sound/_mp4/01mpg.html" alt="" target="soundfrm"></map>

                    und mein option in der Select-Box:
                    <OPTION value="inhalt.html#anchor1">1) Grabmusik KV 42 (35a): Arie &#132;Felsen, spaltet euren Rachen&#147;

                    müßte wahrscheinlich die Funktion anchChoice(obj) anders formuliert werden. Dafür bin ich leider zu dumm.

                    Ich müßte sonst meine komplexen Bezeichnungen, die in der Select-Box erscheinen müssen (im Beispiel hier »1) Grabmusik KV 42 (35a): Arie &#132;Felsen, spaltet euren Rachen&#147«) alle zu Ankernamen machen und das geht schief, hab ich probiert.

                    Gibst Du mir noch einen Tip, wie ich einfache Ankernamen verwenden kann?, genauer gefragt, darf ich Dein Werk überhaupt benutzen? Ich finde es so schön.

                    Gruß Reiner

                    1. Hallo Reiner,

                      du müsstest in der Funktion "anchChoice()" bei deinem Ansatz statt auf innerHTML auf den gesetzten value des entsprechenden Option-Elements zugreifen und die Action des betreffenden Formulars entsprechend ändern, also:

                        
                      form.action = options[selectedIndex].value;  
                      
                      

                      Außerdem müsstest du in der Initialisierungsfunktion auf der Seite, auf der sich die Anker befinden, nach allen fortlaufend bei 1 beginnend nummerierten Elementen suchen, die vor dieser Nummerierung die Erkennungszeichenkette "anchor" tragen also:

                        
                      if(allElements[i].id && allElements[i].id.indexOf('anchor')>-1)  
                      
                      

                      In anderen IDs als denen deiner Anker dürftest du diese Zeichenkette 'anchor' nicht benutzen.

                      Gruß Gernot

                      1. Hallo nochmal Reiner,

                        ich habe die Seite nochmal angepasst, arbeite jetz selbst, so wie du mit gesetzten Values der OPTION-Elemente in der Auswahlbox. Die Initialisierungsfunktion habe ich in zwei verschiedene Funktionen aufgeteilt; in einen Teil, der nur einmalig beim Laden der Seite und einen anderen, der auch beim Resize der Seite aufgerufen wird, was jetzt weniger Rechnerleistung binden sollte.

                        Auch interne Sprünge auf der Ankerseite führen jetzt zu einer Aktualisierung der Anzeige in der Selectbox, was vorher nicht der Fall war.

                        Du darfst den Code gerne benutzen. Vielleicht schreibe ich bei Gelegenheit mal einen Fachartikel dazu, der dann alles haarklein erklärt. Dabei schwebt mir auch eine Lösung ohne Frames vor.

                        Ohne Frames sollte das sogar mit gleichzeitigem dynamischem Ändern von Beispielmusikstücken funktionieren, wie du sie auf deiner Seite präsentieren willst; bei Verwendung von MP3 am besten in Verbindung mit dem Flashplayer.

                        Gruß Gernot

                        1. Hallo Gernot,

                          falls Du nochmal hier vorbeischaust, hab nochmals vielen Dank für Deine wunderschöne Lösung, die ich jetzt mit Deiner Erlaubnis eingebaut habe.

                          Eine Anmerkung noch zur Kompatibilität zwischen IE und Safari:

                          Der Safari begnügt sich auch bei Verwendung von Bildern und Verweisen innerhalb der Ankerseite mit dem a-Tag für die Anker, für den IE muß ich aber auch den p-Tag verwenden und somit »doppelt gemoppelt« anchors schreiben:

                          z.B.
                          p id="anchor1"><a id="anchor1"></a><img id="Titelblatt" src="titelblatt.jpg" name="Titelblatt" width="1257" height="1004" align="top" usemap="#map01" border="0"><map name="map01"></map></p>

                          Das ist doch komisch, oder? Jedenfalls geht es dann auf beiden Browsern.

                          Jetzt aber noch kurz zu meiner fixen Idee (2 Fliegen auf einen Streich):
                          Meinst Du, man könnte in der Select-Box statt ”nur” zum Anker zu springen dort eine Javascript-Funktion einbauen, die
                          1. den Sprung zum Anker erledigt und
                          2. ein sound.html vorlädt.
                          Das wäre das Ei des Columbus.

                          etwa:
                          function target2frames() {
                          top.soundfrm.location.href = sound;        //Sound mit autostart="false" laden
                          top.ankerseite.location.href = #anchor;    //zu einem Anker springen
                          }

                          Mehr fällt mir dazu im Moment leider nicht ein. Das kannst Du bestimmt.

                          Ich vertiefe mich erst mal in die Seite
                          http://de.selfhtml.org/javascript/beispiele/zweiframes.htm

                          oder schlägst Du eine passendere Lektüre vor?

                          Vielen Dank für Deine liebevolle Hilfe

                          Reiner

                          1. Hallo Reiner,

                            Der Safari begnügt sich auch bei Verwendung von Bildern und Verweisen innerhalb der Ankerseite mit dem a-Tag für die Anker, für den IE muß ich aber auch den p-Tag verwenden und somit »doppelt gemoppelt« anchors schreiben:

                            Das kann ich mir eigentlich gar nicht vorstellen. Das Folgende wäre auch absolut nicht valide...

                            p id="anchor1"><a id="anchor1"></a><img id="Titelblatt" src="titelblatt.jpg" name="Titelblatt" width="1257" height="1004" align="top" usemap="#map01" border="0"><map name="map01"></map></p>

                            ...denn du darfst eine ID nur jeweils einmal vergeben. Du känntest es aber stattdessen einmal mit name="anchor1" beim A-Element versuchen. Darauf kannst du das Skript auch anpassen und ausschließlich mit A-Elementen mit Namensattribut arbeiten. Eine Kombination von <p id="anchor1"><a name="anchor1"> ... </a> ...</p> wäre aber vielleicht für ältere Browser auch möglich.

                            Jetzt aber noch kurz zu meiner fixen Idee (2 Fliegen auf einen Streich):
                            Meinst Du, man könnte in der Select-Box statt ”nur” zum Anker zu springen dort eine Javascript-Funktion einbauen, die

                            1. den Sprung zum Anker erledigt und
                            2. ein sound.html vorlädt.

                            "Vorlädt", da bin ich mir bei anderen Plugins als bei Flash nicht sicher. Direkt zum Abspielen aufrufen kannst du es jedoch bestimmt auch mit Quicktime, so wie ich es schon gezeigt habe.

                            Gruß Gernot

                            1. Eine Kombination von <p id="anchor1"><a name="anchor1"> ... </a> ...</p> wäre aber vielleicht für ältere Browser auch möglich.

                              Habe ich jetzt so geschrieben, das sieht viel besser aus und arbeitet auch super.

                              Noch eine Frage, wenn ich folgendes versuche:,

                              function loadAndPlay(soundName) {
                              top.soundfrm.location.href='../Sound/_mp4/'+soundName;
                              top.soundfrm.document.getElementById('sound').Play();
                              }

                              dann ist der sound noch nicht geladen, bevor er spielen kann, sicher gibt es eine Möglichkeit, zu testen, ob der Sound geladen ist bevor der Play-Befehl aufgerufen wird? return true? vielleicht

                              ich möchte kein timeout verwenden, weil ich ja nicht absehen kann in welcher Zeit der Ladevorgang abgeschlossen ist.

                              Sicher wunderst Du dich, warum ich nicht autostart=true verwende, ich habe aber meine Hoffnung nicht augegeben, dass ich eine Funktion finde, die aus der Select-box den Ladevorgang und den Anker auruft. Die "Vor"-Ladefunktion als solche arbeitet einwandfrei in Quicktime. Windows Mesiaplayer probier ich später.

                              Gruß Reiner

                            2. Hallo lieber Gernot,

                              ich habs, galub ich

                              Dein geniales

                              function anchChoice(obj) {
                                 autoScroll=false;
                                 if(pge = parent.frames.ankerseite)
                                    pge.location.href = 'ankerseite.html#' + obj.options[obj.selectedIndex].value;
                                    top.soundfrm.location.href='../Sound/_mp4/' + obj.options[obj.selectedIndex].value + ".html";  //hier meine Erweiterung!
                                    }

                              Dadurch werden die soundfiles nach Auswahl in der Selectbox vorgeladen, sie haben die Namen entsprechend index1.html usw.

                              Wie findest Du das?
                              Ich bin begeistert! Javascript ist unglaublich gut.

                              Das einzige, was man sich jetzt noch wünschen könnte, wäre ein Ladevorgang auf das aktuelle soundfile beim Scrollen, aber wahrscheinlich wäre damit jeder Rechner überfordert, oder was meinst Du? Um das auszuprobieren, habe ich Deine Ankersteuerung leider noch nicht genug genug verstanden.

                              Hab nochmals vielen Dank für Deine wertvolle Hilfe!

                              Gruß Reiner