Wenn Sie domänenübergreifend sind, wird durch einfaches Zurücksetzen des src auf dieselbe URL nicht immer ein erneutes Laden ausgelöst, selbst wenn sich der Speicherort-Hash ändert.
Dieses Problem ist beim manuellen Erstellen von Twitter-Schaltflächen-Iframes aufgetreten, die beim Aktualisieren der URLs nicht aktualisiert wurden.
Twitter-ähnliche Schaltflächen haben die Form:
.../tweet_button.html#&_version=2&count=none&etc=...
Da Twitter das Dokumentfragment für die URL verwendet, wurde beim Ändern des Hash / Fragments die Quelle nicht neu geladen, und die Schaltflächenziele spiegelten nicht meinen neuen, von Ajax geladenen Inhalt wider.
Sie können einen Abfragezeichenfolgenparameter anhängen, um das Neuladen zu erzwingen (z. "?_=" + Math.random()
Dies verschwendet jedoch Bandbreite, insbesondere in diesem Beispiel, in dem der Ansatz von Twitter speziell versucht hat, das Caching zu aktivieren.
Um etwas neu zu laden, das sich nur mit Hash-Tags ändert, müssen Sie das Element entfernen oder das ändern src
, warten, bis der Thread beendet ist, und ihn dann wieder zuweisen. Wenn die Seite noch zwischengespeichert ist, sollte dies keinen Netzwerktreffer erfordern, löst jedoch das erneute Laden des Frames aus.
var old = iframe.src;
iframe.src = '';
setTimeout( function () {
iframe.src = old;
}, 0);
Update : Mit diesem Ansatz werden unerwünschte Verlaufselemente erstellt. Entfernen Sie stattdessen jedes Mal das iframe-Element und erstellen Sie es neu, damit diese Schaltfläche back () wie erwartet funktioniert. Auch schön, den Timer nicht zu haben.