Forum: PC-Programmierung Browser-Startseite auf Laptop im Intranet anders als im Internet einstellen


von Rainer U. (r-u)


Lesenswert?

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..?

von wendelsberg (Gast)


Lesenswert?

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

von Rainer U. (r-u)


Lesenswert?

Naja die Ping-Beispiele in Javascript waren irgendwie immer grauenvoll 
für mich.. (zu lesen/verstehen) hast Du ein einfaches?

von Peter II (Gast)


Lesenswert?

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.

von Rainer U. (r-u)


Lesenswert?

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
von Peter II (Gast)


Lesenswert?

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.

von Rainer U. (r-u)


Lesenswert?

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
}

von Rainer U. (r-u)


Lesenswert?

Ach ja - ich hätte wohl bemerken sollen das ich JQuery benutze.. Bin ja 
kein Profi - vielleicht geht es auch viel einfacher..

von Peter II (Gast)


Lesenswert?

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

von Rainer U. (r-u)


Lesenswert?

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.

von Rainer U. (r-u)


Lesenswert?

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
}

von Rainer U. (r-u)


Lesenswert?

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.

von Rainer U. (r-u)


Lesenswert?

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 ?

von Vlad T. (vlad_tepesch)


Lesenswert?

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?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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

von Jan H. (j_hansen)


Lesenswert?

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?

von Rainer U. (r-u)


Lesenswert?

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
Noch kein Account? Hier anmelden.