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
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.
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.
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 ...;) ...)
Tags und Links javascript popup postmessage