# GWT 2.0 - Clientseitig auf Fremde Htmlseite zugreifen



## synchron (18. Dez 2009)

Hallo,

Ich möchte mit meinem GWT-Client eine fremde Htmlseite (z.B. heise online - Home) einlesen, deren html auswerten/parsen und die Daten dann für meine Darstellung nutzen. Ich komme aber leider nicht an das html ran.
ich habe jetzt über ein Frame und ein setURL die Fremdseite schon geladen. 
Leider ist ein .getElement().getInnerHTML() immer leer... Das liegt vermutlich (zumindest ist das meine einzige idee) daran, dass er die seite noch nicht fertig geladen hat wenn ich das aufrufe. aber ich hab auch keine Möglichkeit gefunden ne art listener anzuhängen, die das ausführt wenn die Seite fertig geladen wurde.
Ich hab jetzt einen Tag mit suchen verbracht und nix gefunden...ich hoffe ihr könnt mir weiter helfen.

Vielen Dank
Synchron


----------



## Noctarius (18. Dez 2009)

Entweder musst du ein IFrame nutzen und "fernsteuern" oder du musst den HTML Code über den Server beziehen. Dein Problem ist der Schutz gegen Cross-Site-Scripting der Webseiten (JavaScripts) verbietet Daten von fremden Webseiten nachzuladen.


----------



## synchron (18. Dez 2009)

man kann die seite dann auch nicht auslesen?
Ich möchte ja keine Formulare ausfüllen o.ä. sondern lediglich eine statische seite laden und auswerten...
hm ärgerlich...
Aber danke für die Antwort


----------



## synchron (18. Dez 2009)

Ich hatte hier
Google Documentation Reader
eine Abfrage gefunden. kann man sowas in der art machen? oder muss da der Server den entsprechenden Client irgendwie kennen und zulassen?

mfg
Synchron


----------



## Noctarius (18. Dez 2009)

Sieht so aus als ob der RequestBuilder selber ein (intern) ein Iframe nutzt um Daten nachzuladen. Könnte also funktionieren.


----------



## synchron (19. Dez 2009)

ich habs jetzt mal ausprobiert, es funktioniert aber nicht. Bekomme immer einen StatusCode 0 zurück...


----------



## Noctarius (20. Dez 2009)

Zeig mal deinen Codeausschnitt


----------



## synchron (20. Dez 2009)

es ist nahezu der identische Code aus dem Beispiel.
Hab nen neues Projekt aufgemacht und die Ausgabe dann jeweils ins nameField geschrieben.


```
String url = "http://www.google.de";
		RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url));

		try {
		  Request request = builder.sendRequest(null, new RequestCallback() {
		    public void onError(Request request, Throwable exception) {
		    	nameField.setText("Error");
		    }

		    public void onResponseReceived(Request request, Response response) {
		      if (200 == response.getStatusCode()) {
		    	  nameField.setText("Treffer. " + response.getText());
		      } else {
		    	  nameField.setText("Fehler " + response.getStatusCode());
		      }
		    }       
		  });
		} catch (RequestException e) {
			nameField.setText("RequestException");
		}
```

mfg
Synchron


----------



## Noctarius (20. Dez 2009)

Ok nach etwas genauerem Suchen im GWT Source - geht doch nicht. Er nutzt ein normales XmlHttpRequest Object und das kann nur von der selben Domain abrufen.

Ein Workaround für Fremddomains steht z.B. in den FAQ. Allerdings nur für JavaScript (JSON Zeugs) - Google Documentation Reader.

Es würde aber funktionieren mit dem JSNI Interface wenn du dynamisch ein 0x0 Pixel großes Iframe erzeugst und dieses die Seite laden lässt. Ist es vollständig geladen, lässt du dir den HTML-Text des Frames ausgeben.


----------



## synchron (20. Dez 2009)

kann man an nen iframe nen listener o.ä. hängen um informiert zu werden wenn er fertig ist?


----------



## synchron (20. Dez 2009)

Weil sowas in der art hatte ich schon...


```
Frame f = new Frame();
		f.setUrl("http://www.google.de");
		RootPanel.get("content").add(f);

		nameField.setText(f.getElement().getInnerHTML());
```


----------



## Noctarius (20. Dez 2009)

Wäre mir nicht bekannt, sorry.


----------



## synchron (22. Dez 2009)

Also nach allen möglichen Versuchen hab ichs jetzt aufgegeben.
Es scheitert wohl an der SOP (Same Origin Policy ? Wikipedia).

Bin darauf gestoßen als ich folgende Fehlermeldung erhielt:

com.google.gwt.core.client.JavaScriptException: (Error): <http://localhost:3152> wurde die Erlaubnis für das Lesen der Eigenschaft Window.document von <http://www.XXXX.de> verweigert.

Also werd ich versuchen mein Problem anders zu lösen...per "normalem" java-prog oder so.

Vielen Dank Noctarius für die Hilfe!

Mfg
Synchron


----------



## Noctarius (22. Dez 2009)

Entweder ein Java-Servlet Proxy bauen, der die Seite abruft und den passenden Code oder die fertig aufbereiteten Daten weiterleitet oder eben selbst JS-Code zusammen fummeln welcher ein Iframe erzeugt und das Zeug drum herum "betreut". Auf letzterer Basis habe ich einen Check gebaut ob Daten über HTTPS abgerufen werden können bevor die Verbindung über SSL versucht wird.


----------

