GWT 2.0 - Clientseitig auf Fremde Htmlseite zugreifen

synchron

Mitglied
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

Top Contributor
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

Mitglied
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
 

Noctarius

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

synchron

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

Java:
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

Top Contributor
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

Mitglied
Weil sowas in der art hatte ich schon...

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

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

synchron

Mitglied
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

Top Contributor
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.
 

Neue Themen


Oben