solero: Problem mit iframe und "cross-domain-javascript"

Moin Allerseits

Mit der Suche konnte ich leider nichts finden, was meinem Problem entspricht, deshalb gelange ich an euch. Meine Firma stellt für fremde Homepages Daten zur Verfügung. Normalerweise geschieht das via unsere API, das können aber nicht alle, deshalb bieten wir auch die Einbindung via iframe an.

Das iframe kann sehr lange werden, deshalb führen wir beim onload des iframe ein JS-Script aus, dass die ganze Homepage nach oben scrollt, damit Besucher, wenn sie zuerst nach unten gescrollt haben, nach einem Reload nicht sehr weit unten verloren sind.

Dieses JS soll ich nun optimieren, dass es nicht ganz zum Seitenanfang scrollt, sondern nur auf die iframe-Höhe. Soweit kein Problem.

Problematisch ist, dass das Script bei JEDEM onload ausgeführt wird, auch beim ersten. Da will ich es aber nicht, sondern erst wenn im iframe auf einer von 5 links geklickt wird.

Ich kann aber nicht einfach im iframe einen eventlistener hinzufügen, da ich dann ein cross-domain-Problem habe. Ich kann nicht vom iframe her ein Script ausserhalb des iframe aufrufen und kann auch nicht das Seiten-scroll-Script von innerhalb des iframe ausführen. (die Hauptseite und die src-des iframe haben verschiedene Domains, dass kann ich nicht anpassen)

Da das iframe und das Script auf einer fremden Seite laufen, muss alles JS und client-seitig sein. Seht ihr eine Möglichkeit, wie ich zwischen iframe und Hauptseite bspw. eine Variable übergeben kann? Oder habt ihr andere Ideen?

Ich hoffe, mein Problem ist verständlich genug geschildert.

Danke an alle bereits im Voraus! MfG, Marc

  1. hallo

    Mit der Suche konnte ich leider nichts finden, was meinem Problem entspricht, deshalb gelange ich an euch. Meine Firma stellt für fremde Homepages Daten zur Verfügung. Normalerweise geschieht das via unsere API, das können aber nicht alle, deshalb bieten wir auch die Einbindung via iframe an.

    Das iframe kann sehr lange werden, deshalb führen wir beim onload des iframe ein JS-Script aus, dass die ganze Homepage nach oben scrollt, damit Besucher, wenn sie zuerst nach unten gescrollt haben, nach einem Reload nicht sehr weit unten verloren sind.

    Warum?

    Eine scrollposition besteht aus einem Grund. Und normalerweise wird diese Position auch beim Nachladen von Inhalten nicht verändert, es sei denn, der Inhalt wird vor dem sichtbaren ereich eingefügt.

    Also aus meiner Sicht eine nicht sinnvolle Massnahmen.

    Ein iframe hat zu dem per default overflow auto. Sein Inhalt beeinflusst also nicht die Anzeige der Gesamtseite.

    Innerhalb des iframes selber die Scrollposition zu manipulieren, sollte für euch einfach sein.

    Dieses JS soll ich nun optimieren, dass es nicht ganz zum Seitenanfang scrollt, sondern nur auf die iframe-Höhe.

    Schlecht: Eine Seite kann mehrere Dienste mit iframes beinhalten. Frage: Welcher iframe soll nun angescrollt werden? Die des aufdringlichsten Programmierers?

    Soweit kein Problem.

    Problematisch ist, dass das Script bei JEDEM onload ausgeführt wird, auch beim ersten.

    Das habt ihr aber selber verbockt! Ansonsten ist das nämlich kein Problem.

    Da will ich es aber nicht, sondern erst wenn im iframe auf einer von 5 links geklickt wird.

    Na wunderbar, dann entferne einfach alles betreffende aus der init Funktion, oder wie immer der callback des onload handlers heisst.

    Ich kann aber nicht einfach im iframe einen eventlistener hinzufügen, da ich dann ein cross-domain-Problem habe.

    Bitte? Es ist euer Script, das euren iframe inhalt manipuliert.

    Ein Problm habt ihr erst, wenn eure User noch das Script von euch hosten müssen.

    Ich kann nicht vom iframe her ein Script ausserhalb des iframe aufrufen und kann auch nicht das Seiten-scroll-Script von innerhalb des iframe ausführen.

    Das sollte auch nicht notwendig sein!

    (die Hauptseite und die src-des iframe haben verschiedene Domains, dass kann ich nicht anpassen)

    Da das iframe und das Script auf einer fremden Seite laufen, muss alles JS und client-seitig sein.

    Das ist schon mal falsche strategie

    Euer User sollte eigentlich nur so was benutzen:

    <iframe src="https//your-dom.example/some/service" sandbox="allow scripts">

    Seht ihr eine Möglichkeit, wie ich zwischen iframe und Hauptseite bspw. eine Variable übergeben kann? Oder habt ihr andere Ideen?

    Ja, das ganze Konzept revidieren.

    Es wird nämlich für eure User nicht einfacher, wenn ihr trotz iframe immer noch das Hosten eines Teils eurer Komponenten verlangt.

    Falls aus einem unerfindlichen Grund immer noch Grund besteht, zwischen Domains zu kommunizieren, dann benutzt

    https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

    -- https://beat-stoecklin.ch/pub/index.html