11550 sujets

JavaScript, DOM et API Web HTML5

bonjour,

j'ai un petit soucis pour créer un lien, qui m'ouvrirait une page (google) et lancerai un script (ma fonction) sur cette page.

<a href="javascript:void((function(){location.href = 'http://www.google.com'})()); javascript:void((function(){windows.onload=mafonction ();})());"><strong>Recherche</strong></a>


la page s'ouvre correctement, mais le script se lance avant le chargement de la page, mes fonctions sur le DOM ne sont donc pas valables.

la question est donc comment attendre le chargement de la page avant de lancer le script.

merci de votre aide.
Modifié par boby212 (23 Feb 2011 - 14:59)
Ce que tu cherche a faire est étrange. Néanmoins pour te répondre je ne pense pas que tu puisse exécuter un script sur une page cible qui ne t'appartient pas (du moins pas de cette manière et pas sans outils).

Vu que tu change ta "location.href" tu ne te trouve plus sur ta page et ne peux pas lancer un script propre a cette nouvelle href... (sauf si elle t'appartient).

La durée de vie d'un script est celle de la page, de ta href. Au moment où tu quitte cette page ton script n'est plus valable.

Je pense pas me tromper. Mais si quelqu'un d'autre voit...

D'ailleurs que veux tu faire ?
Modérateur
jb_gfx a écrit :
C'est possible, ça s'appelle du XSS Smiley smile


Encore faut-il qu'il y est une faille sur le site cible...

À la base, via le site A, on ne peut pas ouvrir une nouvelle fenêtre vers un site B et modifier son DOM via le site A. Ce serait une énorme faille de sécurité des navigateurs. La seule façon d'y arriver est d'exploiter une faille dans le site B s'il a été codé avec les pieds.
Modifié par Tony Monast (22 Feb 2011 - 21:57)
tout d'abord merci pour vos réponses:

des utilitaires comme greasemonkey permettent de réaliser ce genre de choses, mais je voudrait pouvoir le réaliser sans installation de plugins.

la solution serait peu être d'afficher la page dans une iframe ou une balise object et d'en modifier le contenu.

les modifications que je souhaiterais réaliser sont assez simple (modification de style, ajout de balises de mises en formes, et ...)

petite difficulté supplémentaire (ie6)...

pensez vous que tout cela est réalisable ?
Modifié par boby212 (22 Feb 2011 - 22:06)
Modérateur
Il me semble qu'un iframe est soumis aux mêmes contrôles de sécurité empêchant le site A de modifier le site B.

Tu pourrais peut-être récupérer le code HTML du site B (via AJAX ou server-side) pour l'afficher sur le site A, mais l'utilisateur resterait sur le site A. Ne connaissant pas le contexte précis, difficile de dire si c'est une bonne solution.
Modifié par Tony Monast (22 Feb 2011 - 22:15)
on peu pourtant utiliser un évènement onload sur une iframe !

le contexte, c'est de pouvoir palier des défauts de mise en page de certains sites en fournissant aux utilisateur un fichier html local (une sorte de portail) permettant d'accéder à certains sites qui auront été retravaillés. Avec la contrainte d'utiliser IE6.

ce fichier HTML sera mis à jour pour augmenter le nombre de site ainsi traité.

si tu as quelques infos sur la récupération du HTML via Ajax ça m'interesse.
je teste ça.

pour en revenir à la question précédente, il semble que cela soit possible uniquement si le domaine est identique. c'était donc mon problème.

pour éviter les problèmes de sécurité je vais donc créer une page d'entrée différente (mais sur le domaine) affichant le site dans une iframe et en modifiant le contenu sur l'événement onload.


merci pour les infos sur l'ajax je creuserais ça plus tard.