Vous avez besoin de JavaScript. C'est la même chose que dans la page parent, sauf que vous devez préfixer votre commande JavaScript avec le nom de l'iframe.
N'oubliez pas que la même politique d'origine s'applique, vous ne pouvez donc le faire que pour un élément iframe provenant de votre propre serveur.
J'utilise le framework Prototype pour le rendre plus facile:
voir ma question, c'est similaire stackoverflow.com/questions/1962707/… mais ne pouvons-nous pas changer de style si le cadre provient d'un autre serveur?
Jitendra Vyas,
16
C'est exact. Le contenu Iframe est soumis à la politique du même domaine. S'il s'agit de votre domaine, vous pouvez le contrôler, sinon, vous êtes verrouillé. Cela empêche toutes sortes de détournements de pages basés sur Iframe.
Diodeus - James MacFarlane
2
Pas exactement une solution "CSS uniquement", mais assez bonne pour moi. +1
Nicu Surdu
2
Ce n'est pas CSS.
stramin
103
Bref non.
Vous ne pouvez pas appliquer CSS à du HTML chargé dans un iframe, sauf si vous avez le contrôle sur la page chargée dans l'iframe en raison de restrictions de ressources inter-domaines.
est-ce que cela vient d'arriver en 2018? Je me souviens que j'avais l'habitude de configurer le style de l'iframe venu de l'extérieur. J'ai essayé d'appliquer le CSS à l'iframe rendu par le script mais cela ne fonctionne toujours pas.l
ne fonctionne pas: Uncaught DOMException: Impossible de lire la propriété 'contentDocument' de 'HTMLIFrameElement': Bloqué un cadre avec l'origine " HOST " d'accéder à un cadre d'origine croisée.
tubbo
@tubbo, dans votre cas, vous ne pouvez pas intégrer de sites non autorisés empêchés par XSS. C'est seulement pour ceux qui recherchent leurs propres problèmes, pas pour les hackers: p
Riyaz Hameed
10
La réponse rapide est: non, désolé.
Ce n'est pas possible en utilisant simplement CSS. Vous devez essentiellement contrôler le contenu de l'iframe afin de le styliser. Il existe des méthodes utilisant javascript ou la langue Web de votre choix (que j'ai lue un peu, mais que je ne connais pas bien) pour insérer dynamiquement certains styles nécessaires, mais vous auriez besoin d'un contrôle direct sur le contenu iframe, qui sonne. comme vous n'en avez pas.
Utilisez Jquery et attendez que la source soit chargée, voici comment j'ai réalisé (intervalle angulaire utilisé, vous pouvez utiliser la méthode javascript setInterval):
pourquoi n'utilisez-vous pas l'événement chargé iframe?
ProllyGeek
3
probablement pas la façon dont vous pensez. l'iframe devrait également figurer <link>dans le fichier css. ET vous ne pouvez pas le faire même avec javascript si c'est sur un domaine différent.
Pouvez-vous éventuellement donner un exemple de la façon dont cela peut être fait? Voulez-vous dire quelque chose comme <iframe src="/source" link=css-stylesheet:"/css.css">?
Vous ne pouvez plus l'utiliser à cause de la même politique d'origine dans le navigateur Chrome. Le message d'erreur:Uncaught DOMException: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin **** from accessing a cross-origin frame.
Mohammad AlBanna
@adamj, pouvons-nous changer la feuille de style de remplacement de l'élément iframe? si oui, veuillez ajouter le script.
Super Model
2
Une sorte de façon hack-ish de faire les choses, comme l'a dit Eugene. J'ai fini par suivre son code et créer un lien vers mon CSS personnalisé pour la page. Le problème pour moi était que, avec une chronologie Twitter, vous devez contourner Twitter pour remplacer son code par smidgen. Nous avons maintenant une chronologie glissante avec notre CSS, une police IE plus grande, une hauteur de ligne appropriée et la barre de défilement cachée pour des hauteurs supérieures à leurs limites.
var c = document.createElement('link');
setTimeout(frames[0].document.body.appendChild(c),500);// Mileage varies by connection. Bump 500 a bit higher if necessary
Je ne sais pas si c'est la bonne réponse à la question donnée, mais c'était une excellente solution pour redimensionner le formulaire Google à la largeur de l'appareil, merci beaucoup!
shiftyscales
0
Oui, c'est possible bien que lourd. Vous devez imprimer / faire écho au code HTML de la page dans le corps de votre page, puis appliquer une fonction de changement de règle CSS. En utilisant les mêmes exemples donnés ci-dessus, vous utiliseriez essentiellement une méthode d'analyse pour trouver les divs dans la page, puis lui appliquer le CSS, puis la réimprimer / l'écho à l'utilisateur final. Je n'ai pas besoin de cela, donc je ne veux pas coder cette fonction dans chaque élément du CSS d'une autre page Web juste pour aphtply.
Pas possible du côté client. Une erreur javascript s'affichera "Erreur: Autorisation refusée d'accéder à la propriété" document "" car l'Iframe ne fait pas partie de votre domaine. La seule solution est de récupérer la page à partir du code côté serveur et de modifier le CSS nécessaire.
Cette réponse est correcte dans son contenu mais concerne JavaScript alors que la question concerne CSS. La réponse peut être que vous devez utiliser JavaScript, mais vous ne le dites pas. La réponse suppose également que le contenu de l'iFrame provient d'un domaine différent, ce qui n'est pas toujours le cas. Enfin, le message exact variera d'un navigateur à l'autre.
Réponses:
Vous avez besoin de JavaScript. C'est la même chose que dans la page parent, sauf que vous devez préfixer votre commande JavaScript avec le nom de l'iframe.
N'oubliez pas que la même politique d'origine s'applique, vous ne pouvez donc le faire que pour un élément iframe provenant de votre propre serveur.
J'utilise le framework Prototype pour le rendre plus facile:
ou
la source
Bref non.
Vous ne pouvez pas appliquer CSS à du HTML chargé dans un iframe, sauf si vous avez le contrôle sur la page chargée dans l'iframe en raison de restrictions de ressources inter-domaines.
la source
Oui. Jetez un œil à cet autre fil pour plus de détails: Comment appliquer CSS à iframe?
la source
frame1
est le nom iframe, pas l'IDVous pouvez récupérer le contenu d'un
iframe
premier, puis utiliser desjQuery
sélecteurs contre eux comme d'habitude.Bonne chance!
la source
La réponse rapide est: non, désolé.
Ce n'est pas possible en utilisant simplement CSS. Vous devez essentiellement contrôler le contenu de l'iframe afin de le styliser. Il existe des méthodes utilisant javascript ou la langue Web de votre choix (que j'ai lue un peu, mais que je ne connais pas bien) pour insérer dynamiquement certains styles nécessaires, mais vous auriez besoin d'un contrôle direct sur le contenu iframe, qui sonne. comme vous n'en avez pas.
la source
Utilisez Jquery et attendez que la source soit chargée, voici comment j'ai réalisé (intervalle angulaire utilisé, vous pouvez utiliser la méthode javascript setInterval):
la source
probablement pas la façon dont vous pensez. l'iframe devrait également figurer
<link>
dans le fichier css. ET vous ne pouvez pas le faire même avec javascript si c'est sur un domaine différent.la source
<iframe src="/source" link=css-stylesheet:"/css.css">
?Apparemment, cela peut être fait via jQuery:
https://stackoverflow.com/a/13959836/1625795
la source
Uncaught DOMException: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin **** from accessing a cross-origin frame.
Une sorte de façon hack-ish de faire les choses, comme l'a dit Eugene. J'ai fini par suivre son code et créer un lien vers mon CSS personnalisé pour la page. Le problème pour moi était que, avec une chronologie Twitter, vous devez contourner Twitter pour remplacer son code par smidgen. Nous avons maintenant une chronologie glissante avec notre CSS, une police IE plus grande, une hauteur de ligne appropriée et la barre de défilement cachée pour des hauteurs supérieures à leurs limites.
la source
Ajoutez simplement ceci et tout fonctionne bien:
la source
Oui, c'est possible bien que lourd. Vous devez imprimer / faire écho au code HTML de la page dans le corps de votre page, puis appliquer une fonction de changement de règle CSS. En utilisant les mêmes exemples donnés ci-dessus, vous utiliseriez essentiellement une méthode d'analyse pour trouver les divs dans la page, puis lui appliquer le CSS, puis la réimprimer / l'écho à l'utilisateur final. Je n'ai pas besoin de cela, donc je ne veux pas coder cette fonction dans chaque élément du CSS d'une autre page Web juste pour aphtply.
Références:
la source
Combiner les différentes solutions, c'est ce qui a fonctionné pour moi.
la source
Pas possible du côté client. Une erreur javascript s'affichera "Erreur: Autorisation refusée d'accéder à la propriété" document "" car l'Iframe ne fait pas partie de votre domaine. La seule solution est de récupérer la page à partir du code côté serveur et de modifier le CSS nécessaire.
la source