[HTML/CSS][JavaScript] Récupérer un ID sur une autre page Web

Récupérer un ID sur une autre page Web [HTML/CSS][JavaScript] - Javascript/Node.js - Programmation

Marsh Posté le 01-02-2019 à 20:18:27    

Bonjour à tous,
 
Je viens solliciter la clairvoyance des savants programmeurs en HTML/ JS.
Après de multiples recherches, je n'ai pas trouvé de réponse tranchée.
 
Voici mon problème:
 
Sur une page "index" (HTML/CSS/JS), j'aimerai afficher la valeur d'un ID présent sur une autre page "source". Cette page est le 192.168.1.1 de la box, l'ID est le statut de la connexion à internet.
Sur la même page, le javascript me permet avec des commandes comme "var data=document.getElementById("Id" )" et "document.getElementById("data" ).innerHTML = val" de récupérer et modifier le code HTML.
Mais sur une autre page, je ne sais pas.
 
Je peux afficher dans un <iframe> la page en question, mais je voudrais juste la valeur d'un Id en particulier, pas la page entière
 
Est-ce faisable simplement ??
 
Merci pour vos réponses.


Message édité par ge_laf le 01-02-2019 à 20:18:55

---------------
---------------
Reply

Marsh Posté le 01-02-2019 à 20:18:27   

Reply

Marsh Posté le 01-02-2019 à 20:28:55    

Bonjour,
 
Pas certain d'avoir compris. Sache néanmoins que tu ne peux pas communiquer grâce à un navigateur avec une autre page en utilisant le JS, sauf si cette page est sur le même domaine.
Regarde "cross-domain policy".


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 02-02-2019 à 10:09:18    

Merci de ta réponse.
 
En gros, j'ai une page de démarrage personnalisée sur mon navigateur. Et je souhaiterai avoir accès à la page 192.168... de la box.
 
Comme je peux afficher la page du routeur (192.168...) dans ma page de démarrage avec un iframe, je me demandais si le JS avait accès à cette "seconde" page (192.168....)
 
Est-ce plus clair ?
 
Du coup, est-ce sur le même domaine?
 
Merci,
bonne journée


---------------
---------------
Reply

Marsh Posté le 02-02-2019 à 12:32:55    

Je doute, le plus simple reste de tester :

Code :
  1. var iframe = document.getElementById('myiframe');
  2. var el =  iframe.contentWindow.document.getElementById('myelement');


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 03-02-2019 à 01:58:32    

Salut,
 
J'ai testé ta méthode, merci pour la piste.
Le débogueur Firefox me dit:

Citation :

SecurityError: Permission denied to access property "document" on cross-origin object


 
Le code testé, si ça intéresse quelqu'un:

Code :
  1. var Cadre_brut = document.getElementById("mon_Iframe" ); // ID dans la balise iframe
  2. var Cadre_Contenu = Cadre_brut.contentWindow;
  3. var x = Cadre_Contenu.document.getElementById("Element" );
  4. alert(x.innerHTML);


 
C'est à la ligne 3 que ca bug!
Cela doit vouloir dire que ce n'est pas le même domaine :D. Mais je ne comprends pas pourquoi on peut afficher une page, mais pas utiliser du javascript dessus.
 
 
EDIT:
J'ai fait quelques recherches du côté du Cross-Origin Resource Sharing (CORS)
Cependant, on trouve cet info sur cette page :

Citation :

Voici quelques exemples de ressources qui peuvent être embarqués malgré leur origine incomptatible avec la same-origin policy :
    JavaScript avec <script src="..."></script>. Les messages d'erreur de syntaxe ne sont disponibles que pour les script ayant la même origine.
N'importe quoi avec <frame> et <iframe>. Un site peut utiliser l'entête X-Frame-Options pour interdire cela depuis une page n'ayant pas la même origine.


Du coup, théoriquement, ca devrait pouvoir marcher.
 
EDIT2:
J'ai eu une idée: est-ce une bonne piste?
Créer un objet en copiant la page. La copie en mémoire sera donc "locale", puis extraire les données souhaitées.
Parce que je reste complétement dubitatif sur le fait de pouvoir afficher une page, avec ses scripts (donc obtenir un code HTML), et de ne pas pouvoir lire ce code avec son propre JS... Ca ne vous étonne pas??


Message édité par ge_laf le 03-02-2019 à 14:32:54

---------------
---------------
Reply

Marsh Posté le 03-02-2019 à 14:52:05    

Pistes en exploration:
 
 

  • Méthode Window.postMessage


  • HTML <iframe> sandbox Attribute

Lien W3C
J'ai cherché du côté de la valeur sandbox="allow-same-origin"
En théorie: "Allows the iframe content to be treated as being from the same origin"
J'ai testé en croisé avec seamless, dont l'utilité m'échappe un peu.
 
 
Des informations sur le sujet:
 

  • iFrame chez Mozilla / MDN

Voila une page sur ce Lien <ICI>
L'intérêt pour cette faire est au paragraphe :

Citation :

iframe et scripts
Les scripts qui tentent d'accéder au contenu de l'iframe doivent respecter les règles de même origine et ne peuvent pas accéder à la plupart des propriétés d'une autre fenêtre s'ils ont été chargés depuis un domaine différent. Cela s'applique également aux scripts d'un iframe qui souhaitent accéder au contexte englobant. On peut toutefois communiquer entre différents domaines grâce à la méthode Window.postMessage().


Message édité par ge_laf le 03-02-2019 à 15:40:39

---------------
---------------
Reply

Marsh Posté le 03-02-2019 à 17:24:58    

Tout ça est logique, c'est juste une question de sécurité. Imagine, via un iframe je te fais croire que tu te connectes au site de ta banque et avec un JS j'intercepte les requêtes contenant ton identifiant et ton mdp...


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 03-02-2019 à 20:31:46    

Salut,
 
Je comprends les impératifs de sécurité.
C'est une réflexion basique que je me fais, car je souhaite juste "lire" des informations qui sont affichées sur la page fille. Mais comme tu dis, avec JS, il n'y a pas de distinction, et on peut tout aussi simplement lire, écrire et compter même avec de mauvaises intentions...
Et de toutes façons, quand on tombe sur une difficulté en programmation, on peste toujours, ca fait du bien :D :D :D
 
EDIT:
Pour résumer, je n'y suis pas encore arriver. Je vais tester la méthode Window.postMessage.
Si j'ai un peu d'énergie, je testerai la méthode de copie. Certainement que d'autres y ont pensé avant moi, mais je suis curieux :D
 
Et comme toujours, si vous avez des infos interessantes, je suis preneur.
Merci, bonne soirée


Message édité par ge_laf le 03-02-2019 à 20:35:31

---------------
---------------
Reply

Marsh Posté le 03-02-2019 à 20:45:34    

Oui tu peux tester mais cela veut dire que tu modifies la page de ta box.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 04-02-2019 à 14:26:11    

En local, le plus simple pour doubler la crosspolicy c'est de modifier ton fichier host : si tu fait une entrée pour ta box qui pointe sur son IP et une entrée pour ta page d'accueil qui ont un nom de domaine en commun ça devrait fonctionner.
 
Sinon ta page pourrait être en php et aller chercher l'information ?


---------------
D3
Reply

Marsh Posté le 04-02-2019 à 14:26:11   

Reply

Marsh Posté le 04-02-2019 à 15:49:36    

La solution du fichier host est pas mal à mon avis, le php ça veut dire de lancer un serveur à chaque fois...


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 04-02-2019 à 18:02:07    

Salut,
 
Merci pour vos réponses.
Pour le PHP, malheureusement, ca va être trop compliqué pour ce que je veux en faire: c'est une page de démarrage personnalisée en gros.
Comme suggérer par MaybeEijOrNot, ca va faire lourd pour rien :D
 
@mechkurt: Je dois t'avouer que je ne maitrises pas bien ces choses là. :D :D Si vous avez des infos plus précises et pratiques sur la marche à suivre, ce serait avec plaisir!
Sinon comme d'hab, Google est mon ami [:michlastar] [:michlastar] [:t c]
 
Merci, Bonne soirée


---------------
---------------
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed