Alternative zum Popup-Fenster mit postMessage (), um den Status zu steuern

9

Ich habe eine Site, die in einem von zwei Zuständen angezeigt werden kann (sagen wir normal und debug ). In den meisten Szenarien werden Seiten auf dieser Site im normalen Status angezeigt - es gibt jedoch Fälle, in denen diese Seite als Popup geöffnet wird und im Debug angezeigt werden muss. em> Modus.

Ich erreiche das derzeit wie folgt:

JS auf der geladenen Seite wartet auf eine Nachricht mit:

%Vor%

Und wenn die entsprechende Nachricht gesendet wird, wird debug -Modus eingegeben.

Das Problem: Wenn der Benutzer zu einer neuen Seite (auf derselben Site) in diesem Popup-Fenster navigiert, hat die neue Seite keine Ahnung, dass sie in debug Modus als die vorherige ursprüngliche Seite, die das geladene Popup die Nachricht empfangen hat, aber die nachfolgende Seite (n) diese Nachricht nicht empfangen.

Die Hacky-Lösung: Versenden Sie die Nachricht wiederholt (d. h. alle 1 Sek.), um sicherzustellen, dass neue Seiten die Nachricht erhalten und in den debug -Modus wechseln. Wenn sich eine Seite bereits im Debug-Modus befindet, ignoriert sie alle nachfolgenden Nachrichten.

Ich mag es wirklich nicht, die Seite ständig zu verschicken, und wäre lieber eine sauberere und effizientere Lösung, wenn eine existiert. Eine solche Idee wäre, eine neue Nachricht zu senden, wenn das Popup eine neue Seite lädt, aber leider kann ich keine Event-Handler registrieren, um auf ein Seitenladeereignis zu warten, da dies eine Cross-Origin-Operation ist.

Ich könnte auch die Seite laden Nachricht die Eltern, um zu sehen, ob es im Debug-Modus sein sollte - aber ich möchte nicht die Seite geladen werden, um eine Kommunikation zu initiieren - die erste Nachricht sollte von der Eltern stammen.

    
abagshaw 02.09.2017, 20:33
quelle

3 Antworten

3

Haben Sie über lokalen Speicher nachgedacht?

Etwas wie

%Vor%     
Moose Morals 05.09.2017 06:48
quelle
1

Sie können ein Argument in der angegebenen URL übergeben, indem Sie einfach '#debug' oder '? debug = on' anhängen. Websites ignorieren dies normalerweise.

Beim Ladevorgang können Sie nach location.hash oder location.search fragen, je nachdem, was Sie verwenden. Beachten Sie, dass die Änderung der Suchzeichenfolge normalerweise zu einem Neuladen führt und der Hash nicht.

Sie müssen möglicherweise document.links durchlaufen, damit dies funktioniert. Eventuell kann ein 'onhashchange'-Ereignishandler nützlich sein.

    
gnblizz 06.09.2017 09:51
quelle
0

müssen Sie nur Javascript verwenden?

Ich verwende eine php config-Variable, um Apps in den Debug-Modus zu versetzen

dann etwas wie if (<?= $cfg['debug'] . "0" ?>) { whatever needs to be done in debug mode} im JavaScript-Code

Beachten Sie, dass Sie die. "0" benötigen, wenn $ cfg ['debug'] boolesch ist, ansonsten ist die if-Bedingung in Javascript leer, wenn $ cfg ['debug'] falsch ist und Sie einen Syntaxfehler erhalten. .

purist wird wahrscheinlich beim mixen von javascript und php schreien, aber ich mag keine willkürlichen regeln und bin deswegen nie auf ein problem gestoßen (wird gerne begründete argumente dagegen hören ...;) ...)

    
v2belleville 11.09.2017 17:29
quelle

Tags und Links