To jest poprawne. Treść iframe podlega zasadom tej samej domeny. Jeśli pochodzi z Twojej domeny, możesz ją kontrolować, jeśli nie, jesteś zablokowany. Zapobiega to wszelkiego rodzaju przejmowaniu stron przez iframe.
Diodeus - James MacFarlane
2
Nie do końca rozwiązanie „tylko CSS”, ale dla mnie wystarczająco dobre. +1
Nicu Surdu
2
To nie jest CSS.
stramin
103
W skrócie nie.
Nie możesz zastosować CSS do HTML ładowanego w ramce iframe, chyba że masz kontrolę nad stroną ładowaną w ramce iframe z powodu ograniczeń zasobów między domenami.
To prawda, ale tak naprawdę nie pomagaj ludziom dawać przykładu
Simon Dragsbæk
czy to właśnie pojawi się w 2018 roku? Pamiętam, że kiedyś konfigurowałem styl iframe pochodzący z zewnątrz. Próbowałem zastosować css do elementu iframe renderowanego przez skrypt, ale nadal nie działa. L
nie działa: Nieprzechwycony DOMException: Nie można odczytać właściwości „contentDocument” z „HTMLIFrameElement”: Zablokowano ramce z początkiem „ HOST ” dostęp do ramki krzyżowej.
tubbo
@tubbo, w twoim przypadku nie możesz osadzać nieautoryzowanych stron, którym nie można zapobiec z XSS. To jest tylko dla tych, którzy szukają własnych problemów, a nie hakerów: p
Riyaz Hameed
10
Szybka odpowiedź brzmi: nie, przepraszam.
Nie jest możliwe użycie tylko CSS. Zasadniczo musisz mieć kontrolę nad treścią iframe, aby nadać jej styl. Istnieją metody wykorzystujące javascript lub wybrany przez Ciebie język internetowy (o którym trochę czytałem, ale nie znam się), aby dynamicznie wstawiać niektóre potrzebne style, ale potrzebujesz bezpośredniej kontroli nad zawartością iframe, którą brzmi jak ty nie masz.
dlaczego nie używasz zdarzenia załadowanego iframe?
ProllyGeek
3
prawdopodobnie nie tak, jak myślisz. iframe musiałby również <link>w pliku css. I nie możesz tego zrobić nawet z javascript, jeśli jest w innej domenie.
Nie możesz już tego używać z powodu tej samej zasady pochodzenia w przeglądarce Chrome. Komunikat o błędzie:Uncaught DOMException: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin **** from accessing a cross-origin frame.
Mohammad AlBanna
@adamj, Czy możemy zmienić arkusz stylów zastępowania elementu iframe? jeśli tak, uprzejmie dodaj skrypt.
Super Model,
2
Rodzaj hackerskiego sposobu robienia rzeczy jest taki, jak powiedział Eugene. Skończyło się na tym, że podążyłem za jego kodem i linkowałem do mojego niestandardowego CSS strony. Problemem było dla mnie to, że przy osi czasu Twittera musisz zrobić trochę bocznego śledzenia Twittera, aby zastąpić ich kod smidgen. Teraz mamy toczącą się oś czasu z naszym css do niej, IE Większa czcionka, odpowiednia wysokość linii i ukrywanie paska przewijania dla wysokości większych niż ich ograniczenia.
var c = document.createElement('link');
setTimeout(frames[0].document.body.appendChild(c),500);// Mileage varies by connection. Bump 500 a bit higher if necessary
Nie jestem pewien, czy to poprawna odpowiedź na zadane pytanie, ale było to świetne rozwiązanie, aby zmienić rozmiar formularza Google na szerokość urządzenia, wielkie dzięki!
shiftyscales
0
Tak, jest to możliwe, choć uciążliwe. Musisz wydrukować / powtórzyć kod HTML strony w treści strony, a następnie zastosować funkcję zmiany reguły CSS. Korzystając z tych samych przykładów, które podano powyżej, zasadniczo użyłbyś metody parsowania, aby znaleźć div na stronie, a następnie zastosować CSS, a następnie ponownie wydrukować / wysłać echo użytkownikowi końcowemu. Nie potrzebuję tego, więc nie chcę zakodować tej funkcji w każdym elemencie CSS innej strony internetowej, żeby to zrobić.
Niemożliwe ze strony klienta. Zostanie zgłoszony błąd javascript „Błąd: odmowa dostępu do właściwości„ dokumentu ””, ponieważ element iframe nie jest częścią domeny. Jedynym rozwiązaniem jest pobranie strony z kodu po stronie serwera i zmiana wymaganego CSS.
Ta odpowiedź jest poprawna w swojej treści, ale dotyczy JavaScript, natomiast pytanie dotyczy CSS. Odpowiedź może być taka, że musisz używać JavaScript, ale tego nie mówisz. Odpowiedź zakłada również, że treść w ramce iFrame pochodzi z innej domeny, co nie zawsze ma miejsce. Wreszcie dokładny komunikat różni się w zależności od przeglądarki.
Odpowiedzi:
Potrzebujesz JavaScript. Jest to to samo, co robienie tego na stronie nadrzędnej, z tym że musisz poprzedzić komendę JavaScript nazwą iframe.
Pamiętaj, że obowiązują te same zasady pochodzenia, więc możesz to zrobić tylko dla elementu iframe, który pochodzi z twojego serwera.
Używam frameworka Prototype , aby ułatwić:
lub
źródło
W skrócie nie.
Nie możesz zastosować CSS do HTML ładowanego w ramce iframe, chyba że masz kontrolę nad stroną ładowaną w ramce iframe z powodu ograniczeń zasobów między domenami.
źródło
Tak. Spójrz na ten inny wątek, aby uzyskać szczegółowe informacje: Jak zastosować CSS do iframe?
źródło
frame1
to nazwa iframe, a nie IDMożesz pobrać zawartość
iframe
pierwszego, a następniejQuery
jak zwykle użyć przeciwko nim selektorów.Powodzenia!
źródło
Szybka odpowiedź brzmi: nie, przepraszam.
Nie jest możliwe użycie tylko CSS. Zasadniczo musisz mieć kontrolę nad treścią iframe, aby nadać jej styl. Istnieją metody wykorzystujące javascript lub wybrany przez Ciebie język internetowy (o którym trochę czytałem, ale nie znam się), aby dynamicznie wstawiać niektóre potrzebne style, ale potrzebujesz bezpośredniej kontroli nad zawartością iframe, którą brzmi jak ty nie masz.
źródło
Użyj Jquery i poczekaj, aż źródło zostanie załadowane. Oto jak osiągnąłem (Używając interwału kątowego, możesz użyć metody setInterval javascript):
źródło
prawdopodobnie nie tak, jak myślisz. iframe musiałby również
<link>
w pliku css. I nie możesz tego zrobić nawet z javascript, jeśli jest w innej domenie.źródło
<iframe src="/source" link=css-stylesheet:"/css.css">
?Najwyraźniej można to zrobić za pomocą jQuery:
https://stackoverflow.com/a/13959836/1625795
źródło
Uncaught DOMException: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin **** from accessing a cross-origin frame.
Rodzaj hackerskiego sposobu robienia rzeczy jest taki, jak powiedział Eugene. Skończyło się na tym, że podążyłem za jego kodem i linkowałem do mojego niestandardowego CSS strony. Problemem było dla mnie to, że przy osi czasu Twittera musisz zrobić trochę bocznego śledzenia Twittera, aby zastąpić ich kod smidgen. Teraz mamy toczącą się oś czasu z naszym css do niej, IE Większa czcionka, odpowiednia wysokość linii i ukrywanie paska przewijania dla wysokości większych niż ich ograniczenia.
źródło
Wystarczy dodać to i wszystko działa dobrze:
źródło
Tak, jest to możliwe, choć uciążliwe. Musisz wydrukować / powtórzyć kod HTML strony w treści strony, a następnie zastosować funkcję zmiany reguły CSS. Korzystając z tych samych przykładów, które podano powyżej, zasadniczo użyłbyś metody parsowania, aby znaleźć div na stronie, a następnie zastosować CSS, a następnie ponownie wydrukować / wysłać echo użytkownikowi końcowemu. Nie potrzebuję tego, więc nie chcę zakodować tej funkcji w każdym elemencie CSS innej strony internetowej, żeby to zrobić.
Bibliografia:
źródło
Łącząc różne rozwiązania, to działało dla mnie.
źródło
Niemożliwe ze strony klienta. Zostanie zgłoszony błąd javascript „Błąd: odmowa dostępu do właściwości„ dokumentu ””, ponieważ element iframe nie jest częścią domeny. Jedynym rozwiązaniem jest pobranie strony z kodu po stronie serwera i zmiana wymaganego CSS.
źródło