Gargamel: Aktivierung von Flash-Element im IE verhindern

Also man kennt das ja: im IE müssen Flash-Steuerelemente ja erst via Klick aktiviert werden, was ziemlich lästig ist.

Um es zu verhindern sollte eigentlich folgendes Script funktionieren:

function enableActiveX(containerID)
{
  // no IE = no need to enable
  if (getInternetExplorerVersion () != -1) {
    // get container
    var container = document.getElementById (containerID);
    // get html in noscript
    var html = container.innerHTML;
    // write html back to container
    container.innerHTML = html;
  }
}
function getInternetExplorerVersion()
// http://msdn.microsoft.com/workshop/author/dhtml/overview/browserdetection.asp
{
  var rv = -1; // Return value assumes failure
  if (navigator.appName == 'Microsoft Internet Explorer') {
    var ua = navigator.userAgent;
    var re  = new RegExp ("MSIE ([0-9]{1,}[.0-9]{0,})");
    if (re.exec (ua) != null) {
      rv = parseFloat (RegExp.$1);
    }
  }
  return rv;
}

Komischerweise findet der Browser das Flash-Objekt nicht mehr, nachdem ich dieses Script einbaue (das Script wird nach dem relevanten Div eingefügt, in dem sich das Flashobjekt befindet). Hat jemand ne Idee woran das liegen könnte oder kennt jemand ne bessere Lösung für dieses Problem?

Dank und Gruß
Gargamel

  1. Hallo Gargamel,

    im IE müssen Flash-Steuerelemente ja erst via Klick aktiviert werden

    falsch, auch Opera (ab 9.0) benötigt diese Aktivierung.

    das Script wird nach dem relevanten Div eingefügt

    soweit ich das in Erinnerung habe muss es ein _externes_ Script sein.

    Grüße,

    Jochen

    --
    Kritzeln statt texten:
    Scribbleboard
    1. Tach Jochen,

      im IE müssen Flash-Steuerelemente ja erst via Klick aktiviert werden

      falsch, auch Opera (ab 9.0) benötigt diese Aktivierung.

      Aha, gut zu wissen.

      das Script wird nach dem relevanten Div eingefügt

      soweit ich das in Erinnerung habe muss es ein _externes_ Script sein.

      Was genau heißt "extern" in diesem Fall? Das angegebene Script ist natürlich in ner separaten Datei. Im HTML-Code steht dann nur
      <script language="javascript">
                   enableActiveX("Name des Divs mit dem Flashobjekt");
          </script>

      Also hier funktioniert das (mit zusätzlicher Weiche, falls clientseitig kein Flash vorhanden ist) eigentlich ganz gut. Bei mir aber nüscht, was mich doch sehr betrübt. ;-)

      Cheers
      Cervantes

      1. Hi Cervantes ... Gargamel?

        Das angegebene Script ist natürlich in ner separaten Datei.

        gut

        Also hier funktioniert das
        Bei mir aber nüscht, was mich doch sehr betrübt. ;-)

        Dann solltest du das "bei dir" mal komplett zeigen.

        Grüße,

        Jochen

        --
        Kritzeln statt texten:
        Scribbleboard
        1. Dann solltest du das "bei dir" mal komplett zeigen.

          Vielleicht keine schlechte Idee:

          Im Head:
          <script language="JavaScript" src="activex.js"></script> (Det is jenau das zuvor gepostete Script.)

          Im Body:
          <div id="flashplayer">
          <object type="application/x-shockwave-flash" data="emff_standard.swf?src=sound/mabafu_salsanita.mp3" width="110" height="34" align="middle">
           <param name="movie" value="emff_standard.swf?src=sound/mabafu_salsanita.mp3" />
           <param name="quality" value="high" />
           <param name="bgcolor" value="#481609" />
          </object>
          </div>

          <script language="javascript">
                       enableActiveX("flashplayer");
              </script>

          So sieht das aus - nur funktionieren tuts leider nicht.

          Gruß
          Gargamel

          1. Hallo,

            ein testweise eingebautes ...

            function enableActiveX(containerID)
            {

            alert(document.getElementById(containerID).innerHTML);

            zeigte nur ein <object .... ></object> Also ohne die params.
            Überprüft durch ein  alert(document.getElementsByTagName("object")[0].innerHTML);
            Dort stand dann tatsächlich "nichts".

            Der Fehler ist damit zwar klar, aber wie es dazu kommt ist mir rätselhaft. Im Opera kann ich dieses seltsame Verhalten nicht nachvollziehen.

            Grüße,

            Jochen

            --
            Kritzeln statt texten:
            Scribbleboard
            1. Hallo,

              ein testweise eingebautes ...

              function enableActiveX(containerID)
              {

              alert(document.getElementById(containerID).innerHTML);

              zeigte nur ein <object .... ></object> Also ohne die params.
              Überprüft durch ein  alert(document.getElementsByTagName("object")[0].innerHTML);
              Dort stand dann tatsächlich "nichts".

              Der Fehler ist damit zwar klar, aber wie es dazu kommt ist mir rätselhaft. Im Opera kann ich dieses seltsame Verhalten nicht nachvollziehen.

              Danke für Deine Mühen, auch wenns mir natürlich nur bedingt weiterhilft. ;-) Muss auch zugeben, dass meine JavaScript-Kenntnisse bei Weitem nicht ausreichen, um das halbwegs kompetent zu beurteilen.

              Mich wundert halt nur, dass es auf sbk.org bis vor einigen Tagen exakt so implemetiert war und prima funktionierte (Lediglich das Objekt hatte ein paar zusätzliche Angaben, wie z.B. "pluginspage" oder "codebase"). Inzwischen wurde dort mittels dem "AC_OETags.js"-Script zwar noch eine Flash-Detection eingebaut, aber das dürfte keinen großen Unterschied machen. Vorher liefs ja auch.

              Tja, Pech gehabt. Müssen die IE-Nutzer eben einmal mehr klicken.

              Dank und Gruß
              Gargamel

              1. Hallo Gargamel,

                Mich wundert halt nur, dass es auf sbk.org bis vor einigen Tagen exakt so implemetiert war und prima funktionierte (Lediglich das Objekt hatte ein paar zusätzliche Angaben, wie z.B. "pluginspage" oder "codebase").

                seltsam ist, dass das Verhalten anscheinend durch die Angabe:
                data="emff_standard.swf?src=sound/mabafu_salsanita.mp3"
                im <object> getriggert wird. Ohne data="..." funktioniert es so wie ich es erwartet hätte.

                Grüße,

                Jochen

                --
                Kritzeln statt texten:
                Scribbleboard
                1. Hallo Gargamel,

                  Mich wundert halt nur, dass es auf sbk.org bis vor einigen Tagen exakt so implemetiert war und prima funktionierte (Lediglich das Objekt hatte ein paar zusätzliche Angaben, wie z.B. "pluginspage" oder "codebase").

                  seltsam ist, dass das Verhalten anscheinend durch die Angabe:
                  data="emff_standard.swf?src=sound/mabafu_salsanita.mp3"
                  im <object> getriggert wird. Ohne data="..." funktioniert es so wie ich es erwartet hätte.

                  Mensch, det is ja prima. Tatsächlich funktioniert's ohne die Angabe tadellos. Wozu dient der "data"-Hinweis überhaupt?

                  Jedenfalls besten Dank für Deine Hilfe. Wäre ich sonst nie drauf gekommen.

                  Besten Gruß
                  Gargamel

                  1. ...ähm ja, nur besteht leider der Firefox auf den "data"-Zusatz. Sacklzement, langsam wirds lästig...;-)

                    1. Falls es noch jemanden interessieren sollten - ich habs. ;-)

                      Zwar völlig anders als ursprünglich angedacht, aber es funktioniert wenigstens, und zwar hiermit:

                      http://blog.deconcept.com/swfobject/

                      Wiedersehen
                      Gargamel

                      1. Hallo Gargamel,

                        es funktioniert wenigstens, und zwar hiermit:
                        http://blog.deconcept.com/swfobject/

                        wenn man davon absieht das es nur mit javascript funktioniert ...

                        Grüße,

                        Jochen

                        --
                        Kritzeln statt texten:
                        Scribbleboard
                        1. Hallo Gargamel,

                          es funktioniert wenigstens, und zwar hiermit:
                          http://blog.deconcept.com/swfobject/

                          wenn man davon absieht das es nur mit javascript funktioniert ...

                          Das war bei dem ersten Lösungsansatz ja auch der Fall. Kennst Du ne Möglichkeit, die ohne JavaScript auskommt?

                          Gruß
                          Gargamel

                          1. Hallo Gargamel,

                            wenn man davon absieht das es nur mit javascript funktioniert

                            Das war bei dem ersten Lösungsansatz ja auch der Fall.

                            jein, der erste Lösungsansatz sah vor, dass das <object> ganz normal in der Seite steht und nur die Aktivierung per javascript erledigt wurde. Ohne js war es halt ein klick mehr

                            Kennst Du ne Möglichkeit, die ohne JavaScript auskommt?

                            Der ursprüngliche Ansatz war schon gut. Scheiterte allerdings an dem komischen Verhalten des IE bezüglich dem innerMTML. Das kannst du umgehen indem du dir *nicht* das innerHTML holst, sondern es einfach neu zusammenbastelst und zuweist.

                            ~~~javascript player=document.getElementById("flashplayer");
                              obj=
                              "<object type='application/x-shockwave-flash' " +
                              " data='foo.mp3'" +
                              " width='110' height='34'>" +
                              " <param name='movie'   value='foo.mp3'>" +
                              " <param name='quality' value='high'>" +
                              "</object>";

                            player.innerHTML = obj;

                              
                            Nachteil dabei ist, dass du bei Änderungen 2mal anpacken musst. HTML und javascript. Aber so klappts auch ohne js.  
                              
                            HTH  
                              
                            Jochen  
                            
                            -- 
                            Kritzeln statt texten:  
                            [Scribbleboard](http://www.electric-lemon.de/scribbleboard.php)
                            
                            1. jein, der erste Lösungsansatz sah vor, dass das <object> ganz normal in der Seite steht und nur die Aktivierung per javascript erledigt wurde. Ohne js war es halt ein klick mehr

                              Stimmt, da hassu natürlich Recht.

                              Der ursprüngliche Ansatz war schon gut. Scheiterte allerdings an dem komischen Verhalten des IE bezüglich dem innerMTML. Das kannst du umgehen indem du dir *nicht* das innerHTML holst, sondern es einfach neu zusammenbastelst und zuweist.

                              ~~~javascript

                              player=document.getElementById("flashplayer");

                              obj=
                                "<object type='application/x-shockwave-flash' " +
                                " data='foo.mp3'" +
                                " width='110' height='34'>" +
                                " <param name='movie'   value='foo.mp3'>" +
                                " <param name='quality' value='high'>" +
                                "</object>";

                              player.innerHTML = obj;

                              
                              >   
                              > Nachteil dabei ist, dass du bei Änderungen 2mal anpacken musst. HTML und javascript. Aber so klappts auch ohne js.  
                                
                              Werd ich mal ausprobieren. Danke für den Tipp.  
                                
                              Gruß  
                              Gargamel