web-dev-qa-db-fra.com

Ouvrez la page Web et analysez-la à l'aide de JavaScript

Je sais que JavaScript peut ouvrir un lien dans une nouvelle fenêtre mais est-il possible d'ouvrir une page Web sans l'ouvrir dans une fenêtre ou l'afficher à l'utilisateur? Ce que je veux faire, c'est analyser cette page Web pour du texte et l'utiliser comme variables.

Est-ce possible sans toute aide des langues côté serveur? Dans l'affirmative, veuillez m'envoyer dans une direction où je peux y parvenir.

Merci a tous

28
Abs

Vous pouvez utiliser un objet XMLHttpRequest pour ce faire. Voici un exemple simple

var req = new XMLHttpRequest();  
req.open('GET', 'http://www.mydomain.com/', false);   
req.send(null);  
if(req.status == 200)  
   dump(req.responseText);

Une fois chargé, vous pouvez effectuer votre analyse/scraping en utilisant expressions régulières javascript sur le membre req.responseText.

Plus de détails...

En pratique, vous devez faire un peu plus pour obtenir l'objet XMLHttpRequest de manière multiplateforme, par exemple:

var ua = navigator.userAgent.toLowerCase();
if (!window.ActiveXObject)
  req = new XMLHttpRequest();
else if (ua.indexOf('msie 5') == -1)
  req = new ActiveXObject("Msxml2.XMLHTTP");
else
  req = new ActiveXObject("Microsoft.XMLHTTP");

Ou utilisez une bibliothèque ...

Alternativement, vous pouvez vous épargner toute la peine et utiliser simplement une bibliothèque comme jQuery ou Prototype pour prendre soin de cela pour vous.

La politique de même origine peut vous mordre ...

Notez qu'en raison de la même politique d'origine , la page que vous demandez doit provenir du même domaine que la page faisant la demande. Si vous souhaitez demander une page distante, vous devrez le proxy via un script côté serveur.

Une autre solution possible consiste à utiliser Flash pour effectuer la demande, ce qui autorise les demandes interdomaines si le site cible accorde l'autorisation avec un fichier crossdomain.xml correctement configuré.

Voici un article de Nice sur le sujet de la politique de même origine:

31
Paul Dixon

Quelle que soit l'origine est une bibliothèque open source qui vous permet d'utiliser purement Javascript pour faire du grattage. Il résout également le problème de "même origine de domaine". http://www.wwhatorigin.org/

$.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent('http://google.com') + '&callback=?', function(data){
    alert(data.contents);
});
7
guest

Vous utiliseriez AJAX. Cela ferait une demande Get à l'URL en question et retournerait la réponse HTML. Jquery rend cela très facile, par ex.

$.get("test.php");

http://docs.jquery.com/Ajax

Andrew

3
REA_ANDREW

Vous pouvez ouvrir la nouvelle fenêtre dans un iframe:

http://www.w3schools.com/TAGS/tag_iframe.asp

Notez cependant que l'accès Javascript est limité si le site que vous ouvrez provient d'une URL différente. C'est pour empêcher les attaques de script intersite:

http://en.wikipedia.org/wiki/Cross-site_scripting

2
Chris