George Kaplan: inhalt des object-Tag neu laden

Hallo allesamt,

gegeben sei ein <object>-Tag, der kein Flash, sondern eine XSLT-gestylte XML-Datei beinhaltet. Der object-tag wird also als standard-konformer Ersatz für den iframe genutzt. Die xml-Datei wird über das data-Attribut des object-Tags spezifiziert.

Nun will ich per JavaScript eine neue XML-Datei in den object-Tag laden. Also beschreibe ich das data-Attribut des Tags. Das klappt auch, jedoch lädt der Browser das neue Dokument nicht und zeigt es natürlich auch nicht an.

Weiss jemand, wie ich das object-Tag dazu veranlassen kann, die eingebetteten data neu zu laden und anzuzeigen?

und kein Flash! Also kein LoadMovie() ;-)

  1. hi,

    Nun will ich per JavaScript eine neue XML-Datei in den object-Tag laden. Also beschreibe ich das data-Attribut des Tags. Das klappt auch, jedoch lädt der Browser das neue Dokument nicht und zeigt es natürlich auch nicht an.

    Ohne mich bisher mit dieser Thematik beschäftigt zu haben:
    Wenn es so nicht geht, dann sollte es vielleicht möglich sein, wenn du dir per DOM ein neues Object erzeugst, mit der "neuen" URL als Wert des data-Attributs - und dann das bestehende Object mit diesem ersetzt (replaceChild() o.ä.).

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Wenn es so nicht geht, dann sollte es vielleicht möglich sein, wenn du dir per DOM ein neues Object erzeugst, mit der "neuen" URL als Wert des data-Attributs - und dann das bestehende Object mit diesem ersetzt

      Das wird wohl durchaus machbar sein. Aber immer noch komplizierter, als den iframe neu zu laden.

      Und wie man als Naturwissenschaftler und Ingenieur lernt, ist die einfache Methode immer der komplizierten vorzuziehen, wenn beide das gleiche Ergebnis liefern.

      Also werde ich wohl von XHTML strict auf transitional zurück rüsten ;-(

  2. Hallo George,

    gegeben sei ein <object>-Tag, ... Der object-tag wird also als standard-konformer Ersatz für den iframe genutzt.

    Sehr löblich, würden das alle so machen, hörte endlich das Gequatsche über iframes auf.

    Nun will ich per JavaScript eine neue XML-Datei in den object-Tag laden.

    Kein Problem!

    Gegeben sei ein <object>-Tag mit id="o".
    Dann lädts Du eine neue Datei im MSIE mittels:

    document.getElementById("o").object.location.href = dateiname;

    In Geckobrowsern oder im Opera geht es einwenig anders, zunächst brauchst Du eine Referenz auf das Windosobjekt bzw. auf das Dokumentobjekt der Datei im <object>-tag, die mußt Du dir erzeugen, indem in den im <object>-tag geladenen Dateien folgender Funktionsaufruf geschieht:

    if (this!=top) parent.sendObjRef(window, this.document);

    Die Funktion steht - wie Du leicht erkennen kannst in der Datei, die den <object>-tag enthält, oder ist dort eingebunden:

    function sendObjRef(obj1, obj2)
            {
            myObj1=obj1;
            myObj2=obj2;
            }

    Nun ist myObj1 die Referenz auf das Windowsobjekt und myObj2 die auf das Dokumentobjekt. Eigentlich sollte die auf das Windowsobjekt ja reichen, hätte Opera hier keinen Bug.

    Im Mozilla, Firefox und anderen Geckobrowsern lädts Du die neue Datei nun mittels:

    myObj1.location.href = dateiname;

    Leider verbindet Opera hier die Eigenschaft location nicht mit dem Windowsobjekt, sondern mit dem Dokumentobjekt, sodaß eine weitere, unnötige Browserweiche eingefügt werden muß, damit Opera veranlaßt wird mittels:

    myObj2.location.href = dateiname;

    die neue Datei zu laden.

    Gruß
    Avalon

    1. Hallo,

      gegeben sei ein <object>-Tag, ... Der object-tag wird also als standard-konformer Ersatz für den iframe genutzt.

      Sehr löblich, würden das alle so machen, hörte endlich das Gequatsche über iframes auf.

      Es kann Gruende geben, sich fuer bestimmte Anwendungen gegen object und fuer iframe zu entscheiden (ja sogar fuer embed).

      Außerdem ist das iframe-Element Teil der Transitional-Varianten von HTML 4/4.01 und XHTML 1.0 und somit durchaus standardkonform. Insofern sehe ich pragmatisches Handeln und die Kommunikation desselben auch nicht als Gequatsche an ...

      BTW: object ist mir aber auch grundsaetzlich lieber.

      MfG, Thomas

    2. Sehr löblich, würden das alle so machen, hörte endlich das Gequatsche über iframes auf.

      Man muss Alternativen ja schiesslich mal ausprobieren ;-)

      Dann lädts Du eine neue Datei im MSIE mittels:

      ...

      In Geckobrowsern oder im Opera geht es einwenig anders,

      ...

      Leider verbindet Opera hier die Eigenschaft

      ...

      Argh, ich hasse sowas :-(

      Kein Wunder, dass sich das object nicht als Alternative zum iframe durchsetzt, wenn man da wieder kompliziert mit Browserweichen hantieren muss. Das macht dann nicht wirklich Spass, weil viel zu aufwändig.