2009-03-22 5 views
0

donc je dois tirer une javascrit sur une page distante qui a (sans valeur) html combinée avec javascript (utile). La page, appelez, http://remote.com/data.html, ressemble à quelque chose comme ça (fou je sais):Comment charger javascript entremêlées avec html

<html> 
<body> 
<img src="/images/a.gif" /> 
<div>blah blah blah</div><br/><br/> 
var data = { date: "2009-03-15", data: "Some Data Here" }; 

</body> 
</html> 

donc, je dois charger cette variable de données dans ma page locale et de l'utiliser.

Je perfer de le faire avec tout le code côté client. J'ai pensé, si je pouvais obtenir le html de cette page dans une variable javascript locale, je pourrais analyser le code javascript, exécuter eval dessus et être bon pour utiliser les données. J'ai donc pensé charger la page distante dans un iframe, mais je n'arrive pas à trouver l'iframe dans le dom. Pourquoi pas ?:

<script> 
alert(window.parent.frames.length); 
alert(document.getElementById('my_frame')); 
</script> 

<iframe name="my_frame" id='my_frame' style='height:1px; width:1px;' frameBorder=0 src='http://remote.com/data.html'></iframe> 

La première alerte affiche 0, la seconde nulle, ce qui n'a aucun sens. Comment puis-je contourner ce problème?

+0

Attention ce que vous souhaitez - si tout cela réussit, vous (! Et vos utilisateurs) exécuterez code non fiable (si ce n'est pas sous votre contrôle, il pourrait changer à tout moment) dans le contexte de votre page. Drive-by malware, quelqu'un? – Piskvor

+0

Bien sûr, l'alerte affichera 0 et null ... Lorsque ce script s'exécute l'iframe n'existe pas encore ... Mettez la balise de script en dessous de l'élément iframe .. – James

Répondre

2

Avez-vous essayé de commutation de l'ordre - à savoir iframe premier, le script suivant? Le script s'exécute avant que l'iframe ne soit inséré dans le DOM.

En outre, cela a fonctionné pour moi dans une situation similaire: donner le iframe un gestionnaire onload:

<iframe src="http://example.com/blah" onload="do_some_stuff_with_the_iframe()"></iframe> 

Last but not least, faites attention aux questions de cross-site scripting - l'iframe peut être chargé, mais votre JS peut ne pas être autorisé à y accéder.

+0

en utilisant onload() travaillé, mais comme vous le suspectiez, je Je cours dans les problèmes de xss maintenant. Je suppose que je vais devoir utiliser une sorte de solutions côté serveur. –

0

Une option consiste à utiliser XMLHttpRequest pour récupérer la page, bien que apparently soit actuellement implémentée uniquement pour les demandes inter-sites.

Je comprends que vous voudrez peut-être faire un outil qui a utilisé la connexion Internet du client pour récupérer la page html (pour la sécurité ou pour des raisons juridiques), il est donc un espoir légitime. Si vous finissez par avoir besoin de le faire côté serveur, alors peut-être une simple page php qui prend une URL comme requête et retourne un morceau json contenant le script dans une chaîne. De cette façon, si vous trouvez que vous avez besoin de filtrer certains sites Web, vous n'avez qu'à le faire en un seul endroit.

Le problème inévitable est que certains des utilisateurs seront hostiles, et ils ont alors permis d'abuser de ce qui est effectivement un proxy javascript. Par conséquent, l'option la plus sûre consiste à effectuer tous les traitements sur le serveur et à ne pas autoriser certains appels de fonction javascript (eval, requêtes http, etc.).

Questions connexes