Wir bauen eine Drupal-Site mit einem Audio-Player, der weiterspielen soll, während Sie auf der Seite surfen (so etwas wie Soundcloud).Sollte ich einen Iframe anstelle von Ajax verwenden?
Zur Zeit laden wir geklickt <a>
Websites mit AJAX und injizieren Sie die HTML in die Seite und verwenden Sie history.js, um den Speicherort zu manipulieren.
Es gibt einen großen Nachteil aber:
Da eine neu geladene Seite kann unterschiedliche css und js drauf, haben wir die aktuellen Skript, Stil und Verbindungselemente auf den Ajax-Antworttext (hässlich regex) vergleichen und fügen nur die neuen, noch nicht vorhandenen Elemente hinzu. Auf diese Weise wird das Laden einer anderen Seite nicht gelöscht/entfernt/rückgängig gemacht, sobald die Skripte ausgeführt wurden. Dies kann zu einem Leistungsproblem werden (während Regex gegen Markup sowieso ist).
ein iframe verwenden, kann diese und andere Probleme lösen:
Wenn Sie zuerst einen Link auf der Website klicken, wird der Seiteninhalt durch einen iframe ersetzt wird, die nur die Seite lädt. Der Audio-Player befindet sich im ursprünglichen Dom, d. e. außerhalb des iFrames. Das Klicken auf Links innerhalb des Iframes kann abgefangen und auch in der History-API verwendet werden.
Also, obwohl ich nie gedacht habe, dass ich denke: Ich denke, mit einem iframe könnte hier die bessere Option sein, nicht wahr?
PS: Mein Hauptproblem ist, dass ich nicht kontrollieren kann, dass verschiedene Seiten auf der Website verschiedene Skripte haben, die Stile sind wirklich kein Problem. Wenn es nur eine riesige statische js und css Website-weit gab, hatte ich kein Problem.
aktualisieren
Die Iframe-Lösung funktioniert gut, außer in iOS. Iframes sind buggy wie die Hölle. Dennoch denke ich, dass wir mit der iframe-Lösung gehen werden.
Sie könnten eine "reset.css" -Datei haben, die alle zuvor geladenen css aufräumt - aber dann müssten Sie genau wissen, was jede Seite in der Art von css anwenden würde, was wie Sie klingt habe keine Kontrolle über. Es ist auch möglich, css zu entladen, wenn es über 'link's geladen wird, aber auch hier hängt es davon ab, wie Sie das css laden, schauen Sie hier: http://stackoverflow.com/questions/1598899/unload-css-from-webpage –
Das CSS ist kein Problem. Wenn Sie Stil- oder Verknüpfungselemente entfernen, wird die CSS rückgängig gemacht. Wenn Sie die neuen anhängen, werden die Stile aktualisiert. aber Skripte verhalten sich anders – Alex
Warum brauchen Sie verschiedene CSS/JS-Dateien? Kannst du sie nicht verketten/minimieren und einmal servieren? Auf diese Weise müssen Sie beim Ändern der Seite nur die verschiedenen Zustände (Ereignisse binden, losbinden ...) korrekt behandeln. –