Как применить CSS к iframe?
У меня есть простая страница с несколькими 9X_rssfeed разделами iframe (для отображения ссылок 9X_html RSS). Как применить тот же формат CSS с 9X_div-layouts главной страницы к странице, отображаемой 9X_css3 в iframe?
- gawpertron, просто чтобы прояснить, вы говорите, что ес ...
Ответ #1
Ответ на вопрос: Как применить CSS к iframe?
Изменить: это не работает в нескольких доменах, если 9X_span не установлен соответствующий CORS header.
Здесь есть 9X_max-height две разные вещи: стиль блока iframe и стиль 9X_box-shadow страницы, встроенной в iframe. Вы можете 9X_css3 установить стиль блока iframe обычным способом:
Стиль 9X_html-tag страницы, встроенной в iframe, должен быть 9X_html5 установлен путем включения его на дочернюю 9X_html-tag страницу:
Или его можно загрузить с родительской 9X_box-shadow страницы с помощью Javascript:
var cssLink = document.createElement("link");
cssLink.href = "style.css";
cssLink.rel = "stylesheet";
cssLink.type = "text/css";
frames['iframe1'].document.head.appendChild(cssLink);
- Обратите внимание, мне кажется, что некоторые из опубликованных ранее примеров теперь недействительны для html5. Вы можете получить доступ к содержимому фрейма следующим образом: `document.getElementById (" myframe "). ContentDo ...
Ответ #2
Ответ на вопрос: Как применить CSS к iframe?
Я столкнулся с этой проблемой с Календарем Google. Я хотел 9X_css3 сделать его более темным фоном и изменить 9X_rssfeed шрифт.
К счастью, URL-адрес из встроенного 9X_css3 кода не имел ограничений на прямой доступ, поэтому 9X_divs с помощью функции PHP file_get_contents
можно получить
весь 9X_css-layout контент со страницы. Вместо вызова URL-адреса 9X_max-width Google можно вызвать файл php, расположенный 9X_div на вашем сервере, например. google.php
, который будет 9X_webpage содержать исходный контент с изменениями:
$content = file_get_contents('https://www.google.com/calendar/embed?src=%23contacts%40group.v.calendar.google.com&ctz=America/Montreal');
Добавление 9X_div-layouts пути к вашей таблице стилей:
$content = str_replace('','', $content);
(Это поместит 9X_iframe вашу таблицу стилей последней перед закрывающим 9X_rssfeed тегом head
.)
Укажите базовый URL-адрес из исходного 9X_span URL-адреса в случае, если css и js вызываются 9X_inline-block относительно:
$content = str_replace('',' ', $content);
Окончательный файл google.php
должен 9X_html5 выглядеть следующим образом:
',' ', $content);
$content = str_replace('','', $content);
echo $content;
Затем вы меняете 9X_iframe код внедрения iframe
на:
Удачи!
- Вы можете назвать это взломом по определению, если хотите. Но вы не предложили лучшего реш ...
Ответ #3
Ответ на вопрос: Как применить CSS к iframe?
Если содержимое iframe не полностью находится 9X_max-width под вашим контролем или вы хотите получить 9X_webpage доступ к содержимому с разных страниц с 9X_max-width разными стилями, вы можете попробовать управлять 9X_html им с помощью JavaScript.
var frm = frames['frame'].document;
var otherhead = frm.getElementsByTagName("head")[0];
var link = frm.createElement("link");
link.setAttribute("rel", "stylesheet");
link.setAttribute("type", "text/css");
link.setAttribute("href", "style.css");
otherhead.appendChild(link);
Обратите внимание, что 9X_css-classes в зависимости от того, какой браузер вы 9X_iframes используете, это может работать только на 9X_webpage страницах, обслуживаемых из того же домена.
- В том же духе, но более лаконично: `<iframe onload=" this.contentDocument.body.style.over ...
Ответ #4
Ответ на вопрос: Как применить CSS к iframe?
var $head = $("#eFormIFrame").contents().find("head"); $head.append($("", { rel: "stylesheet", href: url, type: "text/css" }));
9X_max-width
Ответ #5
Ответ на вопрос: Как применить CSS к iframe?
Вот как применить код CSS напрямую, не используя 9X_html5 для загрузки дополнительной таблицы стилей.
var head = jQuery("#iframe").contents().find("head");
var css = '';
jQuery(head).append(css);
Баннер 9X_rssfeed скрывается на странице iframe. Спасибо за 9X_divs ваши предложения!
Ответ #6
Ответ на вопрос: Как применить CSS к iframe?
Если вы управляете страницей в iframe, как 9X_css сказал Хангей, самый простой подход - создать 9X_span общий файл CSS с общими стилями, а затем 9X_webpage просто связать его со своими html-страницами.
В 9X_rssfeed противном случае вы вряд ли сможете динамически 9X_div изменять стиль страницы с внешней страницы 9X_css в вашем iframe. Это связано с тем, что браузеры 9X_html5 ужесточили безопасность кросс-фрейм-сценариев 9X_inline-block из-за возможного неправильного использования 9X_css-layout для спуфинга и других взломов.
This tutorial может предоставить 9X_divs вам дополнительную информацию о создании 9X_div-layouts скриптов для iframe в целом. About cross frame scripting объясняет 9X_rss ограничения безопасности с точки зрения 9X_rss IE.
Ответ #7
Ответ на вопрос: Как применить CSS к iframe?
Окно iframe универсально обрабатывается 9X_max-height большинством браузеров как другая HTML-страница. Если 9X_iframes вы хотите применить ту же таблицу стилей 9X_css к содержимому iframe, просто укажите на 9X_divs нее ссылку со страниц, которые там используются.
- @hangry, но ... как?<p><span ...
Ответ #8
Ответ на вопрос: Как применить CSS к iframe?
Вышеупомянутое с небольшими изменениями 9X_css-layout работает:
var cssLink = document.createElement("link")
cssLink.href = "pFstylesEditor.css";
cssLink.rel = "stylesheet";
cssLink.type = "text/css";
//Instead of this
//frames['frame1'].document.body.appendChild(cssLink);
//Do this
var doc=document.getElementById("edit").contentWindow.document;
//If you are doing any dynamic writing do that first
doc.open();
doc.write(myData);
doc.close();
//Then append child
doc.body.appendChild(cssLink);
Отлично работает как минимум с 9X_css3 ff3 и ie8
Ответ #9
Ответ на вопрос: Как применить CSS к iframe?
У меня сработало следующее.
var iframe = top.frames[name].document;
var css = '' +
'';
iframe.open();
iframe.write(css);
iframe.close();
9X_div-layouts
Ответ #10
Ответ на вопрос: Как применить CSS к iframe?
Расширение вышеупомянутого решения jQuery, чтобы 9X_div-layouts справиться с любыми задержками при загрузке 9X_html содержимого фрейма.
$('iframe').each(function(){
function injectCSS(){
$iframe.contents().find('head').append(
$('', { rel: 'stylesheet', href: 'iframe.css', type: 'text/css' })
);
}
var $iframe = $(this);
$iframe.on('load', injectCSS);
injectCSS();
});
Ответ #11
Ответ на вопрос: Как применить CSS к iframe?
использование может попробовать следующее:
$('iframe').load( function() {
$('iframe').contents().find("head")
.append($(""));
});
9X_iframe
- Если ваш iframe поступает из другого источника, механизм CORS не разрешит этот ...
Ответ #12
Ответ на вопрос: Как применить CSS к iframe?
Если вы хотите повторно использовать CSS 9X_html и JavaScript с главной страницы, возможно, вам 9X_css-layout стоит подумать о замене загруженным содержимым 9X_div Ajax. Теперь это больше подходит для SEO, когда 9X_webpage поисковые роботы могут выполнять JavaScript.
Это 9X_div пример jQuery, который включает другую страницу 9X_div-layouts html в ваш документ. Это намного удобнее 9X_max-height для SEO, чем iframe
. Чтобы быть уверенным, что 9X_iframes боты не индексируют включенную страницу, просто 9X_max-height добавьте ее для запрета в robots.txt
Вы также можете 9X_span включить jQuery непосредственно из Google: http://code.google.com/apis/ajaxlibs/documentation/ - это 9X_html-tag означает необязательное автоматическое включение 9X_css-layout новых версий и некоторое значительное увеличение 9X_css-classes скорости. Кроме того, это означает, что 9X_css-classes вы должны доверять им, поскольку они предоставят 9X_div-layouts вам только jQuery;)
Ответ #13
Ответ на вопрос: Как применить CSS к iframe?
Моя компактная версия:
Однако иногда iframe
не готов к загрузке 9X_html-tag окна, поэтому необходимо использовать таймер.
Готовый код (с 9X_html таймером):
... и ссылка jQuery:
Ответ #14
Ответ на вопрос: Как применить CSS к iframe?
Поскольку много ответов написано для одних 9X_html-tag и тех же доменов, я напишу, как это сделать 9X_box-shadow в кросс-доменах.
Во-первых, вам нужно знать 9X_html Post Message API. Нам нужен мессенджер для связи между двумя 9X_div окнами.
Вот созданный мной мессенджер.
/**
* Creates a messenger between two windows
* which have two different domains
*/
class CrossMessenger {
/**
*
* @param {object} otherWindow - window object of the other
* @param {string} targetDomain - domain of the other window
* @param {object} eventHandlers - all the event names and handlers
*/
constructor(otherWindow, targetDomain, eventHandlers = {}) {
this.otherWindow = otherWindow;
this.targetDomain = targetDomain;
this.eventHandlers = eventHandlers;
window.addEventListener("message", (e) => this.receive.call(this, e));
}
post(event, data) {
try {
// data obj should have event name
var json = JSON.stringify({
event,
data
});
this.otherWindow.postMessage(json, this.targetDomain);
} catch (e) {}
}
receive(e) {
var json;
try {
json = JSON.parse(e.data ? e.data : "{}");
} catch (e) {
return;
}
var eventName = json.event,
data = json.data;
if (e.origin !== this.targetDomain)
return;
if (typeof this.eventHandlers[eventName] === "function")
this.eventHandlers[eventName](data);
}
}
Использование 9X_span этого в двух окнах для общения может решить 9X_webpage вашу проблему.
В главных окнах
var msger = new CrossMessenger(iframe.contentWindow, "https://iframe.s.domain");
var cssContent = Array.prototype.map.call(yourCSSElement.sheet.cssRules, css_text).join('\n');
msger.post("cssContent", {
css: cssContent
})
Затем получите 9X_iframes событие от iframe.
В iframe:
var msger = new CrossMessenger(window.parent, "https://parent.window.domain", {
cssContent: (data) => {
var cssElem = document.createElement("style");
cssElem.innerHTML = data.css;
document.head.appendChild(cssElem);
}
})
Дополнительные 9X_div сведения см. в Полном руководстве по Javascript and Iframes.
Ответ #15
Ответ на вопрос: Как применить CSS к iframe?
В других ответах здесь используются ссылки 9X_span jQuery и CSS.
В этом коде используется обычный 9X_iframe JavaScript. Он создает новый элемент . Он 9X_css-classes устанавливает текстовое содержимое этого 9X_inline-block элемента как строку, содержащую новый CSS. И 9X_iframe он добавляет этот элемент непосредственно 9X_css-classes в заголовок документа iframe.
var iframe = document.getElementById('the-iframe');
var style = document.createElement('style');
style.textContent =
'.some-class-name {' +
' some-style-name: some-value;' +
'}'
;
iframe.contentDocument.head.appendChild(style);
Ответ #16
Ответ на вопрос: Как применить CSS к iframe?
Когда вы говорите «doc.open()», это означает, что 9X_rss вы можете написать любой HTML-тег внутри 9X_iframe iframe, поэтому вам следует написать все 9X_max-width основные теги для HTML-страницы и, если 9X_html вы хотите иметь ссылку CSS в заголовке iframe 9X_css просто напишите iframe со ссылкой на CSS. Приведу 9X_divs пример:
doc.open();
doc.write('Print Frame ' + out + '
');
doc.close();
Ответ #17
Ответ на вопрос: Как применить CSS к iframe?
Вы не сможете стилизовать содержимое iframe 9X_rss таким образом. Я предлагаю использовать 9X_css-classes серверные сценарии (PHP, ASP или Perl-сценарий) или 9X_html-tag найти онлайн-сервис, который преобразует 9X_box-shadow канал в код JavaScript. Единственный другой 9X_div-layouts способ сделать это - включить серверную 9X_max-width часть.
- Будьте осторожны, когда говорите, что что-то нельзя с ...
Ответ #18
Ответ на вопрос: Как применить CSS к iframe?
Если у вас есть доступ к странице iframe 9X_html-tag и вы хотите, чтобы к ней применялся другой 9X_css-classes CSS, только когда вы загружаете его через 9X_rss iframe на свою страницу, здесь я нашел решение 9X_max-height для таких вещей
это работает, даже если iframe 9X_rss загружает другой домен
узнать о postMessage()
план состоит 9X_iframe в том, чтобы отправить CSS в iframe в виде 9X_rssfeed сообщения, например
iframenode.postMessage('h2{color:red;}','*');
*
должен отправить это 9X_css3 сообщение независимо от того, в каком домене 9X_span оно находится в iframe
и получите сообщение 9X_rssfeed в iframe и добавьте полученное сообщение 9X_iframe (CSS) в заголовок этого документа.
код для 9X_css-layout добавления на страницу iframe
window.addEventListener('message',function(e){
if(e.data == 'send_user_details')
document.head.appendChild('');
});
Ответ #19
Ответ на вопрос: Как применить CSS к iframe?
Я думаю, что самый простой способ - добавить 9X_div еще один div в то же место, что и iframe, а 9X_span затем
сделайте его z-index
больше, чем контейнер 9X_css-classes iframe, чтобы вы могли легко стилизовать 9X_iframes свой собственный div. Если вам нужно щелкнуть 9X_html-tag по нему, просто используйте pointer-events:none
в своем собственном 9X_html-tag div, чтобы iframe работал, если вам нужно 9X_div щелкнуть по нему;)
Надеюсь, это кому-то поможет;)
Ответ #20
Ответ на вопрос: Как применить CSS к iframe?
Мы можем вставить тег стиля в iframe.
9X_iframe
- Это не работает. Кажется, тег стиля вставлен правильно, но внутри него нет содержимого и идентификат ...
Ответ #21
Ответ на вопрос: Как применить CSS к iframe?
Я нашел другое решение, чтобы поместить 9X_css стиль в основной html следующим образом
а 9X_html-tag затем сделайте это в iframe (см. js onload)
и 9X_span в js
Возможно, это не лучшее решение, и его, безусловно, можно 9X_div-layouts улучшить, но это еще один вариант, если 9X_div вы хотите сохранить тег стиля в родительском 9X_max-height окне
Ответ #22
Ответ на вопрос: Как применить CSS к iframe?
Здесь есть две вещи внутри домена
- Раздел iFrame
- Страница загружена в iFrame
Итак, вы 9X_iframe хотите стилизовать эти два раздела следующим 9X_span образом:
1. Стиль для раздела iFrame
Он может стилизовать с использованием 9X_css-classes CSS с уважаемым именем id
или class
. Вы также можете 9X_html5 просто стилизовать его в родительских таблицах 9X_div-layouts стилей.
2. Стиль страницы, загруженной в iFrame
Эти стили могут быть загружены с 9X_inline-block родительской страницы с помощью Javascript
var cssFile = document.createElement("link")
cssFile.rel = "stylesheet";
cssFile.type = "text/css";
cssFile.href = "iFramePage.css";
затем 9X_rssfeed установите этот файл CSS в уважаемый раздел 9X_div-layouts iFrame
//to Load in the Body Part
frames['my_iFrame'].document.body.appendChild(cssFile);
//to Load in the Head Part
frames['my_iFrame'].document.head.appendChild(cssFile);
Здесь вы можете редактировать головную 9X_css часть страницы внутри iFrame, используя 9X_css этот же способ
var $iFrameHead = $("#my_iFrame").contents().find("head");
$iFrameHead.append(
$("",{
rel: "stylesheet",
href: urlPath,
type: "text/css" }
));
Ответ #23
Ответ на вопрос: Как применить CSS к iframe?
var link1 = document.createElement('link');
link1.type = 'text/css';
link1.rel = 'stylesheet';
link1.href = "../../assets/css/normalize.css";
window.frames['richTextField'].document.body.appendChild(link1);
9X_html5
- это имя iframe<p><span ...
Ответ #24
Ответ на вопрос: Как применить CSS к iframe?
Вот как я поступаю в продакшене. Следует 9X_css3 иметь в виду, что если iframe принадлежит 9X_css3 другому веб-сайту, он вызовет ошибку CORS 9X_rssfeed и не будет работать.
var $iframe = document.querySelector(`iframe`);
var doc = $iframe.contentDocument;
var style = doc.createElement("style");
style.textContent = `*{display:none!important;}`;
doc.head.append(style);
В некоторых случаях 9X_rssfeed вы также можете прикрепитьload
событие в iframe:
var $iframe = document.querySelector(`iframe`);
$iframe.addEventListener("load", function() {
var doc = $iframe.contentDocument;
var style = doc.createElement("style");
style.textContent = `*{display:none!important;}`;
doc.head.append(style);
});
Ответ #25
Ответ на вопрос: Как применить CSS к iframe?
Существует wonderful script, который заменяет узел собственной 9X_html5 версией iframe. CodePen Demo
Примеры использования:
// Single node
var component = document.querySelector('.component');
var iframe = iframify(component);
// Collection of nodes
var components = document.querySelectorAll('.component');
var iframes = Array.prototype.map.call(components, function (component) {
return iframify(component, {});
});
// With options
var component = document.querySelector('.component');
var iframe = iframify(component, {
headExtra: '',
metaViewport: ''
});
- Почему вы хотите это сделать ...
Ответ #26
Ответ на вопрос: Как применить CSS к iframe?
В качестве альтернативы вы можете использовать 9X_span технологию CSS-in-JS, как показано ниже: lib:
https://github.com/cssobj/cssobj
Он 9X_max-height может динамически внедрять объект JS как 9X_css-classes CSS в iframe
-
2
-
6
-
3
-
4
-
14
-
8
-
9
-
6
-
5
-
6
-
6
-
6
-
5
-
5
-
4
-
2
-
3
-
2
-
3
-
2
-
5
-
9
-
2
-
4
-
1
-
3
-
2
-
2
-
1
-
5
-
4
-
23
-
19
-
2
-
3
-
5
-
8
-
8
-
1
-
3
-
3
-
3
-
14
-
8
-
5
-
8
-
2
-
3
-
4
-
2