tag:forum.selfhtml.org,2005:/self aufruf einer URL innerhalb einer function() – SELFHTML-Forum 2017-06-05T06:33:02Z https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695159#m1695159 Lorenz 2017-05-28T15:09:40Z 2017-05-28T15:09:40Z aufruf einer URL innerhalb einer function() <p>ich habe eine Text-Datei, die eine Variabele enthält z.B. var ip = '0.0.0.0' Diese binde ich für gewöhnlich in <head> ein mit:</p> <p><SCRIPT SRC="datei.txt" TYPE="text/javascript" LANGUAGE="JavaScript"></SCRIPT></p> <p>Dann kann ich sie weiterverarbeiten z.B mit:</p> <p><script type="text/javascript"> function test() { location.href="http://" + ip; } </script></p> <p>Jetzt möchte ich aber gerne die Text-Datei erst innerhalb der function test() aufrufen und nicht im <head> laden. Mein Problem ist es, dass sich die Text-Datei von Zeit zu Zeit ändert. Ist nun die Seite im Browser geladen, wärend sich die Text-Datei verändert hat, müsste man erst ein reload der Seite machen, um den richtigen Wert zu bekommen. Wenn die Text-Datei allerdings innerhalb der Funktion aufgerufen wird, wäre sie stets aktuell.</p> <p>Also <script type="text/javascript"> function test() { SRC="datei.txt" location.href="http://" + ip; } </script> funktioniert schon mal nicht.</p> <p>Hab leider nichts passendes gefunden, wäre über eine kleine Hilfestellung wirklich dankbar.</p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695163#m1695163 dedlfix 2017-05-28T15:32:07Z 2017-05-28T15:32:07Z aufruf einer URL innerhalb einer function() <p>Tach!</p> <blockquote> <p><SCRIPT SRC="datei.txt" TYPE="text/javascript" LANGUAGE="JavaScript"></SCRIPT></p> </blockquote> <p>TYPE="text/javascript" ist der Default.Wert, kann also entfallen, LANGUAGE="JavaScript" braucht es gar nicht.</p> <blockquote> <p>Hab leider nichts passendes gefunden, wäre über eine kleine Hilfestellung wirklich dankbar.</p> </blockquote> <p>Stichwort: Ajax. Klein genug, die Hilfestellung?</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695165#m1695165 Rolf b 2017-05-28T15:35:46Z 2017-05-28T15:35:46Z aufruf einer URL innerhalb einer function() <p>Möglichkeit 1: Du machst in der test() Funktion einen <a href="http://wiki.selfhtml.org/wiki/JavaScript/Ajax" rel="nofollow noopener noreferrer">AJAX</a>-Zugriff und lässt Dir die IP davon liefern.</p> <p>Möglichkeit 2: Du arbeitest mit <a href="https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events" rel="nofollow noopener noreferrer">Server-sent Events</a> oder <a href="http://wiki.selfhtml.org/wiki/JavaScript/WebSocket" rel="nofollow noopener noreferrer">Web-Sockets</a>, um Änderungen der IP an die aktiven Clients zu verteilen. Das ist allerdings aufwändig und setzt passende Infrastruktur auf der Serverseite voraus.</p> <p>Möglichkeit 3: Da der Anwendungszweck dieser Nummer eine Redirektion zu sein scheint, ruf doch einfach eine Seite bei Dir auf, die einen Redirect zur IP enthält.</p> <p><em>Rolf</em></p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695653#m1695653 Lorenz 2017-06-02T01:31:02Z 2017-06-02T01:31:02Z aufruf einer URL innerhalb einer function() <p>Was mich an Forenbeiträgen immer am meisten stört ist, dass ein Thema besprochen wird, dann aber keine konkrete Lösung gezeigt wird. Falls mal jemand ein ähnliches Problem hat und zufällig hier drauf klickt, möchte ich mal meinen Lösungsansatz zeigen.</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">function</span> <span class="token function">homeip</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> home <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">XMLHttpRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> home<span class="token punctuation">.</span><span class="token function-variable function">onreadystatechange</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>readyState <span class="token operator">==</span> <span class="token number">4</span> <span class="token operator">&&</span> <span class="token keyword">this</span><span class="token punctuation">.</span>status <span class="token operator">==</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">///extrahiert die IP zu meinen Server</span> <span class="token keyword">var</span> ip <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">.</span>responseText<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex"><span class="token regex-delimiter">/</span><span class="token regex-source language-regex">var ip = '</span><span class="token regex-delimiter">/</span><span class="token regex-flags">g</span></span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token regex"><span class="token regex-delimiter">/</span><span class="token regex-source language-regex">';</span><span class="token regex-delimiter">/</span><span class="token regex-flags">g</span></span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">///ruft den Server auf</span> location<span class="token punctuation">.</span>href<span class="token operator">=</span><span class="token string">"http://"</span> <span class="token operator">+</span> ip<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> home<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><span class="token string">"GET"</span><span class="token punctuation">,</span> <span class="token string">"datei.txt"</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> home<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">///zeigt eine Fehlerseite an, falls der Server nicht erreichbar ist</span> <span class="token keyword">function</span> <span class="token function">Weiterleitung</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>location<span class="token punctuation">.</span>href <span class="token operator">=</span> <span class="token string">"fehler.htm"</span><span class="token punctuation">;</span><span class="token punctuation">}</span> window<span class="token punctuation">.</span><span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token string">"Weiterleitung()"</span><span class="token punctuation">,</span> <span class="token number">5000</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> <p>Vielleicht nicht das Eleganteste, aber für mich erfüllt es seinen Zweck. Vielen Danke an dedlfix und Rolf b für euren Beistand.</p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695179#m1695179 Lorenz 2017-05-28T17:21:27Z 2017-05-28T17:21:27Z aufruf einer URL innerhalb einer function() <p>Danke für Eure Hilfe, aber alles noch nicht ganz das, wonach ich suche. Vielleicht muss ich doch etwas weiter aushohlen.</p> <p>Ich betreibe bei mir zu Haus einen kleinen Webserver und verfüge gleichzeitig über eine Webspace, der durch einer Domain erreichbar ist. Wann immer eine Zwangstrennung meiner Internetleitung stattfindet überträgt die Fritzbox eine Text-Datei mit der aktuellen IP an meine Webspace. Damit kann ich Weiterleitunge oder Links auf meinen Webserver erstellen.</p> <p>Das Problem ist nun, wenn eine Seite im Browser geöffnet ist, wärend sich die Text-Datei ändert, ist immernoch die veralterte IP gespeichert und alle Links würden nicht mehr funktionieren. Daher will ich die Text-Datei mit der IP zu meinem Webserver erst mit der javascript funktion aufrufen. Damit würde sie nicht mit der Seite geladen wird, sondern erst beim ausführen des Scripts.</p> <p>Mit Ajax oder Server-Events kann ich wohl die IP des Webspace auslesen, aber leider nicht die IP meines Servers.</p> <p>Was ich bräuchte, wäre sowas wie: var ip = url.open(Text-Datei.txt) oder var ip = src(Text-Datei.txt) oder irgend eine Möglichkeit die Variabele der Text-Datei auszulesen.</p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695190#m1695190 dedlfix 2017-05-28T19:15:31Z 2017-05-28T19:15:31Z aufruf einer URL innerhalb einer function() <p>Tach!</p> <blockquote> <p>Mit Ajax oder Server-Events kann ich wohl die IP des Webspace auslesen, aber leider nicht die IP meines Servers.</p> </blockquote> <p>Damit kannst du nicht mehr und nicht weniger, als Requests an deinen Server stellen. Was du als Antwort bekommst, hängt davon ab, was der Server antwortet.</p> <blockquote> <p>Was ich bräuchte, wäre sowas wie: var ip = url.open(Text-Datei.txt) oder var ip = src(Text-Datei.txt) oder irgend eine Möglichkeit die Variabele der Text-Datei auszulesen.</p> </blockquote> <p>Ja, Ajax.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695368#m1695368 Rolf b 2017-05-30T08:27:15Z 2017-05-30T08:27:15Z aufruf einer URL innerhalb einer function() <p>Ist der Webspace "dumm" - in dem Sinne, dass Du dort kein PHP laufen lassen kannst? Dann wäre die Ajax-Lösung wohl sinnvoll.</p> <p>Wenn Du dort PHP laufen lassen kannst, dann KANNST du alle Verlinkungen auf deinen lokalen Webserver über Redirects im Webspace laufen lassen. Der Redirect geht zum Webspace, dort liest PHP die TXT-Datei und generiert eine Response mit entsprechender Weiterleitung.</p> <p><em>Rolf</em></p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695501#m1695501 Lorenz 2017-05-31T01:46:19Z 2017-05-31T01:46:19Z aufruf einer URL innerhalb einer function() <p>Ja, leider ist der Server dumm. Ich brauch wohl was mit Ajax, arbeite noch daran. Bin darin nicht der schnellste. Die Datei mit Ajax laden und dann als script evaluieren. Vielleicht auch gleich noch eine Abfrage ob die IP richtig und der Server erreichbar ist.</p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695654#m1695654 dedlfix 2017-06-02T06:05:49Z 2017-06-02T06:05:49Z aufruf einer URL innerhalb einer function() <p>Tach!</p> <blockquote> <p>Was mich an Forenbeiträgen immer am meisten stört ist, dass ein Thema besprochen wird, dann aber keine konkrete Lösung gezeigt wird.</p> </blockquote> <p>Ja, das ist durchaus so gewollt. Üblicherweise führe ich die Probleminhaber zu einer Lösung, aber das eigentliche Lösen und das Lernen dabei sollen sie selbst tun. Zudem ist das Thema Ajax weder neu noch unzureichend dokumentiert in diesem Internet.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695656#m1695656 Rolf b 2017-06-02T06:44:03Z 2017-06-02T06:48:17Z aufruf einer URL innerhalb einer function() <p>Du musst dabei auch berücksichtigen, dass es relativ schnell geht, abstrakte Tipps zu geben, es aber deutlich mehr Zeit kostet, ein konkretes und korrektes Lösungsbeispiel aufzuschreiben.</p> <p>Ein paar Gedanken noch als Nachtrag:</p> <p>Ich würde Dir empfehlen, die per Ajax ermittelte IP zu validieren, bevor Du sie für einen Redirect nutzt. Natürlich nicht dahin gehend, ob sie für deinen Bedarf inhaltlich plausibel ist (es sei denn, du könntest IP-Nummernkreise festlegen, die für Dich korrekt sind, ist aber unwahrscheinlich). Aber Du könntest prüfen, ob Du eine gültige IPv4 bzw. IPv6 bekommen hast.</p> <p>Man kann sich zwar auf den Standpunkt stellen, dass diese Datei von Dir bereitgestellt ist und Du für die technische Korrektheit des Inhalts garantierst, aber eine robuste Programmierung vertraut keiner externen Quelle - und für deinen Ajax-Zugriff ist die IP-Datei eine externe Quelle.</p> <p>Du könntest alternativ überlegen, ob Du nicht die ganze URL aus der Datei lesen solltest. Du bist derzeit auf http: Protokoll, Port 80 und Defaultseite des Webroot festgelegt. Wenn Du die ganze URL lädst, bist Du flexibler. Das hängt natürlich davon ab, ob die Prozedur, die die Datei schreibt, eine vollständige Adresse erzeugen kann. Und natürlich müsste der Ajax-Receiver dann auf gültige URL prüfen, was nicht ganz trivial ist - aber dafür gibt's fertige <a href="https://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-a-url" rel="noopener noreferrer">Regex oder JS Libraries</a> bzw. in PHP (wenn Du die Datei mit PHP erzeugst) gibt es die Validierungsfilter.</p> <pre><code class="block language-php"><span class="token variable">$url</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"http://1.2.3.4/myhome/index.html"</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">filter_var</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token constant">FILTER_VALIDATE_URL</span><span class="token punctuation">)</span> <span class="token operator">!==</span> <span class="token constant boolean">FALSE</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// URL ok, in Datei schreiben</span> <span class="token punctuation">}</span> </code></pre> <p>PHP hat einige <a href="http://php.net/manual/de/ref.filter.php" rel="noopener noreferrer">Funktionen</a> und <a href="http://php.net/manual/de/filter.filters.validate.php" rel="noopener noreferrer">Filter</a> für Validierungen.</p> <p><em>Rolf</em></p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695734#m1695734 Lorenz 2017-06-03T00:45:02Z 2017-06-03T00:45:02Z aufruf einer URL innerhalb einer function() <p>Tut mir leid, ich wollte wirklich niemanden zu nahe treten. Ich hatte auch nicht erwartet, dass hier jemand mein Problem für mich löst. Ist nur oft so, dass in vielen Foren Einträge lapidar mit 'Problem gelöst - Thread geschlossen' enden, und ich frage mich bei lesen dann, wie denn nun?</p> <p>Ausserdem muss ich zugeben, dass es mir richtig Spass gemacht hat, mal ein paar Zeilen Code selbst zu schreiben und nicht nur den von anderen zu kopieren, wie ich es sonst immer tue.</p> <p>...</p> <p>Die IP zu prüfen, ist sicherlich sinnvoll, falls mal jemand dieses Script in einer anderen Umgebung anwenden möchte. Und mit php wäre das ganze Problem deutich leichter zu lösen. In meinen Fall erstelle ich die IP-Datei ja selber.</p> <p>Viel wichtiger wäre es heraus zufinden, ob mein Server unter der IP tatsächlich erreichbar ist. Kommt ja schon mal vor, dass für eine Weile keine Internetverbindung besteht. Dann endet eine Anfrage in einer hässlichen 'Netzwerk-Zeitüberschreitung' Anzeige.</p> <p>Die TimeOut-Weiterleitung ist sicher nur die zweit beste Lösung. Ich bastelle grade noch an einer if/else Weiche.</p> <p>Das von mir gepostete Script ist der Übersichtlichkeit halber auch nur einen verkürzte Version. In meinem Fall geht es um eine Wertübergabe zwischen verschiedene Frames, was es auch nicht leichter macht.</p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695743#m1695743 dedlfix 2017-06-03T06:46:29Z 2017-06-03T06:46:29Z aufruf einer URL innerhalb einer function() <p>Tach!</p> <blockquote> <p>Viel wichtiger wäre es heraus zufinden, ob mein Server unter der IP tatsächlich erreichbar ist. Kommt ja schon mal vor, dass für eine Weile keine Internetverbindung besteht. Dann endet eine Anfrage in einer hässlichen 'Netzwerk-Zeitüberschreitung' Anzeige.</p> </blockquote> <p>Dazu musst du aber nicht nur prüfen, ob irgendwas antwortet, sondern ob es auch dein Server ist, der da antwortet. Und es gibt kein anderes Mittel, als einen Request zu senden und auf Antwort zu hoffen oder deren Ausbleiben nach Zeit festzustellen.</p> <blockquote> <p>In meinem Fall geht es um eine Wertübergabe zwischen verschiedene Frames, was es auch nicht leichter macht.</p> </blockquote> <p>Warum Frames? Ist dir das vom Fachlichen her noch nicht komplex genug? </p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695839#m1695839 Lorenz 2017-06-05T00:36:44Z 2017-06-05T00:36:44Z aufruf einer URL innerhalb einer function() <p>Ist halt so, dass das Frameset wegen der Erreichbarkeit auf meinem Webspace liegt, und die Frameinhalte wegen der Datengrösse von meinem Server kommen.</p> <p>Innerhalb eines Request, der sein Ergebnis auf einen iframe sendet festzustellen, ob dann im iframe eine Seite angezeigt wird ist glaube ich nicht möglich. Ich hab das jetzt (mit Hilfe Rolfs 3. Möglichkeit) anders gelöst. Ich rufe im Request noch einen zweiten unsichtbaren iframe auf, der eine Weiterleitung zu meinem Server zusammen mit einer Timeout Funktion enthält. Ist mein Server offline, bekomme ich dann (top.location) eine Fehlerseite angezeigt.</p> <p>Und an die Möglichkeit, dass sich unter meiner IP von gestern tatsächlich mal wer meldet, hab ich bisher noch gar nicht gedacht. Im schlimmsten Fall bekomm ich aber doch nur eine 'Not Found' Meldung. Allerdings gewinn ich wohl eher im Lotto, als dass das mal passiert.</p> https://forum.selfhtml.org/self/2017/may/28/aufruf-einer-url-innerhalb-einer-function/1695843#m1695843 dedlfix 2017-06-05T06:33:02Z 2017-06-05T06:33:02Z aufruf einer URL innerhalb einer function() <p>Tach!</p> <blockquote> <p>Innerhalb eines Request, der sein Ergebnis auf einen iframe sendet festzustellen, ob dann im iframe eine Seite angezeigt wird ist glaube ich nicht möglich.</p> </blockquote> <p>Deswegen nimmt man heutzutage Ajax. Da hat man die volle Kontrolle über den Inhalt.</p> <p>dedlfix.</p>