Oto nieco krótsza/prostsza wersja mojej poprzedniej odpowiedzi. Aby wszystko było łatwiejsze, po prostu wykonamy wywołanie AJAX na każdym dzienniku, a aby jeszcze łatwiej było, użyjemy jQuery do "ciężkiego podnoszenia". (Jeśli używasz biblioteki JS innej niż jQuery, powinna ona mieć jakąś podobną metodę, jeśli nie, lub jeśli nie używasz biblioteki JS ... czas na poważnie za jQuery!) Och, a my " Wrzucam pseudo-kod po stronie serwera, aby pokazać, jak łatwa jest ta część równania.
Krok 1: Dodaj kilka console.log sprawozdania, które pomogą zdiagnozować problem
Krok 2: Dodaj logikę ponownego zdefiniowania console.log na układ swojego klienta tak, że wysyła do serwera dziennika jeśli nie ma konsoli
var SERVER_URL = "www.yourServer.com/ajaxLogger.jsp";
var ajaxConsole = {"log":function(x) {
$.get(SERVER_URL, {"log":x});
}}
console = console || ajaxConsole; // If there is no console, use the AJAX one
Krok 3: Tworzenie strony logowania na serwerze
Poniższy przykład używa pseudo-kodu, ponieważ każdy ma inny język po stronie serwera:
String log = pageParameters["log"];
Database.execute("INSERT INTO yourLogTable (log, date) VALUES ('" +
dbEscape(log) +"', current date)");
PS: Nie wszystkie przeglądarki obsługują funkcję onUnload; jeśli twój klient tego nie robi, prawdopodobnie będziesz chciał wywołać wywołania AJAX na każdym pliku console.log (lub użyć window.setInterval do "poll" window.log często). – machineghost
Interesujące i trudne .. ale wygląda na skomplikowane! (w szczególności krok 3) Czy nie ma prostszego sposobu na zrobienie tego ..? – Dexter
To naprawdę proste, ale wystarczy spróbować pokazać, że dodałem drugą odpowiedź. – machineghost