Ich bin ein Berater, der an einer Web-App arbeitet, die im Grunde eine einseitige App ist. Alles, was es tut, ist ständig neue json-Daten hinter den Kulissen abzurufen (wie einmal pro Minute) und sie dann auf dem Bildschirm anzuzeigen.

Unsere Kunden laden diese App und lassen sie wochenlang rund um die Uhr laufen. Wenn beim Abrufen neuer JSON-Daten Fehler auftreten, ignoriert die App diese und läuft weiter.

Wir führen ein Update ein und möchten, dass die vorhandenen Clients entweder ungültig werden oder sich selbst ohne Benutzerinteraktion neu laden. Diese Funktion wurde von niemandem "eingebaut", und wir versuchen dies nachträglich.

Gibt es eine Möglichkeit, die vorhandenen Clients neu zu laden, ohne unsere Endbenutzer anzuweisen, die Seite einfach neu zu laden?

Die folgenden Bedingungen definieren die App etwas mehr:

  • Die App verwendet jQuery 1.9.0
  • Läuft ausschließlich in Chrome
  • Ruft häufig mit jquery neue json-Daten ab
  • Wirft alle in json-Antworten gefundenen Fehler weg und verwendet alte Daten.

BEARBEITEN:

Ich habe vorgeschlagen, dass wir Folgendes versuchen könnten:

  • Senden Sie ungültige Daten über die JSON-Antworten an Crash-Chrome (z. B. 500 MB Daten).
  • Senden Sie window.location.reload über die JSON-Antwort (die angeblich nicht funktioniert, da die Abfrage vor solchen Dingen schützt).
  • Senden Sie "Skript" -Daten in der JSON-Antwort. Wenn irgendwann $ .html (....) angezeigt wird, wird möglicherweise auch das Skript ausgeführt.

Und bin offen für alle Vorschläge, wie Chrome neu geladen oder beendet werden soll, sodass der Client gezwungen ist, die Seite neu zu laden.

1
Brad Parks 29 Nov. 2013 im 18:47

3 Antworten

Beste Antwort

Wenn Sie $ .ajax verwenden, um Ihre Daten anzufordern, und Ihren Inhaltstyp nicht speziell festlegen, können Sie auf dem Server möglicherweise Folgendes tun:

  • Setzen Sie den Header des Inhaltstyps auf "Text / Javascript".
  • Antworten Sie mit Javascript, z. window.location = "http://www.yoursite.com"

JQuery kann dies bewerten und einfach Ihr Javascript ausführen.

2
TheWestIsThe... 29 Nov. 2013 im 15:31

Wenn ich es richtig verstehe, erstellen Sie eine Versionsreferenzseite und lassen Sie den Client diese Seite einige Sekunden lang überprüfen. Wenn Sie die Datei aktualisieren, lädt sich der Client mit diesem Skript neu.

var buildNo = "1.2.0.1";//

var cV = setInterval(checkVersion,(5*1000))//Every 5 sec.

function checkVersion(){

    $.ajax({
        url:"checkVersion.php?v="+buildNo,
        dataType:"JSON",
        success:function(d){
            if(d.version != buildNo){//if version is different
                window.location.reload();
                //chrome.runtime.reload(); //for chrome extensions
            }
        }
    })
}

Wenn Sie keine zusätzliche Seite hinzufügen können, können Sie am Ende Ihrer JSON-Daten einfach eine zusätzliche Variable hinzufügen.

0
siniradam 29 Nov. 2013 im 15:01

Nein, das ist nicht möglich. Soweit ich Ihnen sagen kann, führen Sie keinen Code aus der JSON-Antwort aus (was sehr gut ist). Somit haben Sie keine Möglichkeit, das Verhalten Ihres aktuellen Kunden zu ändern. Nach Ihrer eigenen Aussage:

"Wirft alle Fehler in JSON-Antworten weg und verwendet alte Daten."

Sie können den Browser des Benutzers nicht zum Absturz bringen, indem Sie ungültige JSON-Daten senden, da die Fehler unterdrückt werden.

Sie können die automatische Bereitstellung in zukünftige Versionen integrieren, indem Sie eine Versionsnummer der Anwendung senden und auf Änderungen testen oder verwenden WebSockets (für die die Anwendung ohnehin besser geeignet zu sein scheint, da Sie sicherstellen können, dass Ihre Clients den Server nur abfragen, wenn sich der JSON tatsächlich geändert hat).

1
George Reith 29 Nov. 2013 im 15:13