Ich bastel gerade mit HTML/Javascript/AJAX und versuche folgendes zu lösen: Ist mein Laptop im Intranet, möchte ich eine bestimmte, nur dort erreichbare Seite als Browser-Startseite haben. Aber ist mein Laptop woanders im Internet, wo er diese Seite nicht im Zugriff hat, soll eine definierte Internetseite geladen werden. Ich hab mir das so gedacht: Ich speichere eine lokale .html-Datei und stelle mir die als Startseite ein. Beim Laden dieser Seite teste ich mit Javascript oder so, ob ich die Intranetseite erreichen kann (1 Sekunde Timeout), und bei Timeout lade ich die externe Seite, sonst eben die interne. Aber wie bekomme ich diesen Test hin (ob der Intranet-Server verfügbar ist) - Ajax scheidet wohl aus, weil die .html-Datei nicht vom Server geliefert wurde..?
Rainer Unsinn schrieb: > Aber wie bekomme ich diesen Test hin (ob der Intranet-Server verfügbar > ist) Das Ergebnis von ping xxx.xxx.xxx.xxx abfragen? (IP des Intranetservers einsetzen, oder IP eines NUR im Intranet vorhandenen Servers) wendelsberg
Naja die Ping-Beispiele in Javascript waren irgendwie immer grauenvoll für mich.. (zu lesen/verstehen) hast Du ein einfaches?
Rainer Unsinn schrieb: > Ajax scheidet wohl aus, weil die .html-Datei nicht vom Server > geliefert wurde..? was hat das eine mit dem andere zu tun? Man kann mit ajax jeder Server ansprechen egal woher das script geladen wurden. Wenn die Orgin-Policy zuschlägt bekommt man nur keinen Inhalt. Aber du willst ja auf Timeout prüfen, das sollte gehen.
Peter II schrieb: > Wenn die Orgin-Policy > zuschlägt bekommt man nur keinen Inhalt. Ja, aber sie schlägt immer zu (also ich bekomme immer sofort keinen Inhalt) und deshalb taugt das nicht als Test..
:
Bearbeitet durch User
Rainer Unsinn schrieb: > Ja, aber sie schlägt immer zu (also ich bekomme immer sofort keinen > Inhalt) und deshalb taugt das nicht als Test.. nein macht sie nicht. Weil der Server den man anfragt in Header festlegen darf das jemand fremdes von ihm Daten abrufen darf. Um diesen Header zu prüfen muss man erst mal eine Abfrage ausführen.
Peter II schrieb: > nein macht sie nicht. Bei mir aber schon.. Also ich bekomme als Antwort vom Server überhaupt nix / vielleicht muss ich auch anders abfragen? - auf dem Server liegt zum Test einfach ein kleines php-Script (alive.php):
1 | <?php
|
2 | echo json_encode("ok"); |
3 | ?>
|
Das kann ich mit dem Browser aufrufen und bekomme "ok" zurück. Aber innerhalb der Seite gelingt mir das nicht -
1 | function alive_check() |
2 | { |
3 | var _loc = gTESTLocation + "alive.php"; |
4 | $.ajax |
5 | ({ |
6 | type: "POST", |
7 | timeout: 1000, |
8 | url: _loc, |
9 | data: { dummy:"x" }, |
10 | success: function(data) |
11 | { alert("alles ok"); window.location = URL1; }, |
12 | error: function(x, t, m) |
13 | { if(t==="timeout") |
14 | { alert("Timeout"); window.location = URL2; } |
15 | else |
16 | { alert("allgemeiner ajax-Fehler(" + t + ")"); window.location = URL2; } |
17 | } |
18 | }); |
19 | } |
Ach ja - ich hätte wohl bemerken sollen das ich JQuery benutze.. Bin ja kein Profi - vielleicht geht es auch viel einfacher..
Rainer Unsinn schrieb: > Bei mir aber schon.. Also ich bekomme als Antwort vom Server überhaupt > nix / vielleicht muss ich auch anders abfragen? - auf dem Server liegt > zum Test einfach ein kleines php-Script (alive.php): ich habe doch geschrieben, das du auch wegen der Policy einen Header brauchst. Aber du sollst einfach auf Timetout abfragen. Wenn ein Timeout kommt bist du nicht im firmennetz. http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing
Peter II schrieb: > Aber du sollst einfach auf Timetout abfragen. Ich weiß aber nicht WIE.. was müsste ich denn ändern in meinem Code (s.o.) - da ist ja schon ein Timeout von 1s drin.. Ich habe noch ein anderes Beispiel mit einem Bild gesehen.. mal sehen vielleicht verstehe ich das besser.
Hier habe ich noch einen anderen Lösungsansatz gesehen, aber da weiß ich nicht, wie ich den Timeout von 1s hineinbekommen soll:
1 | function checkServerStatus() |
2 | { |
3 | alert("bin da"); |
4 | var img = document.body.appendChild(document.createElement("img")); |
5 | img.onload = function() |
6 | { |
7 | window.location = URL1; |
8 | }; |
9 | img.onerror = function() |
10 | { |
11 | window.location = URL2; |
12 | }; |
13 | img.src = "http://myserver.com/ping.gif"; |
14 | } |
Und hier noch ein Beispiel mit Timeout, aber da versteh ich das Prinzip nicht (also ich nehme mal an es muss in eine Javascript-Funktion): [/code] var image = new Image(); image.src = "https://www.site.com/cgi-bin/pullimg.cgi?user=" + encodeURI( document.cookie ); setTimeout ( function() { if ( !image.complete || !image.naturalWidth ) { image.src = "http://mirror.site.com/err.png"; } }, 1000 ); [/code] Erste Zeile ist klar. Zweite Zeile: ich vermute, es ist so gemacht, damit es irgendwie dynamisch ist bzw. nicht aus dem Browser-Cache geladen wird Dritte Zeile: ? warum muss man die Funktion da drin schreiben? Na gut, also das passiert nach einer Sekunde.
Also für heute geb ich erstmal auf, wäre aber trotzdem nett, wenn einer ein einfaches Kochrezept hätte. Ist Fr nachmittag und ich stell mich doof an, aber warum muss das mit diesem Html/Javascript-Geraffel so kompliziert sein? Ich will doch nur schreiben / erreichen if ping(Intranetserver) < 1s then lade die Seite else lade andere Seite Bilde ich mir das ein oder ist php einfacher zu durchschauen ?
kann man nicht einfach versuchen eine Datei von einer Url im Intranet mittels load (http://api.jquery.com/load/) zu laden und je nach Erfolg die eine oder andere Seite per window.location (http://www.tizag.com/javascriptT/javascriptredirect.php) setzen?
Rainer Unsinn schrieb: > Und hier noch ein Beispiel mit Timeout, aber da versteh ich das Prinzip > nicht Das Timeout ist keins im sinne von "versuch es X Sekunden" sondern NACH X Sekunden... Dein Problem wird auch sein das für Lokales HTML nochmal andere Restriktionen gelten. Mach es doch einfach so: - <div> mit einer ID - CSS Datei welche das Div rot färbt vom Intranetserver einbinden - Nach Timeout (z.B: 3 Sekunden) per JS prüfen ob Div Rot ist --> Redirect
Rainer Unsinn schrieb: > Ich will doch nur schreiben / erreichen > > if ping(Intranetserver) < 1s > then lade die Seite > else lade andere Seite > > Bilde ich mir das ein oder ist php einfacher zu durchschauen ? Der Grund ist einfach: JavaScript ist das falsche Tool für diesen Einsatz. Ich möchte z.B. nicht, dass beliebige Seiten, die ich im Browser öffne, auf einmal damit anfangen wild herumzupingen. Darum ist das recht restriktiv. "Saubere" Möglichkeiten: Internen DNS-Eintrag auf interne Seite und externen DNS-Eintrag auf externe Seite. Oder Redirect am Server, aber den wirst du wohl von Extern gar nicht erreichen, oder?
Läubi .. schrieb: > Das Timeout ist keins im sinne von "versuch es X Sekunden" sondern NACH > X Sekunden... Ja ich glaube, das war mein Verständnisproblem. Also eher ein Timer (Wecker). Jan Hansen schrieb: > Oder Redirect am Server, aber > den wirst du wohl von Extern gar nicht erreichen, oder? So ist es. "Saubere" Möglichkeiten: Internen DNS-Eintrag auf interne Seite und externen DNS-Eintrag auf externe Seite Wie das? es sind ja 2 verschiedene Seiten, und die externe Seite soll auch von intern (unter ihrere üblichen URL) erreichbar sein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.