Css 替代iframe中内容的主体样式
如何控制Css 替代iframe中内容的主体样式,css,iframe,styles,overriding,Css,Iframe,Styles,Overriding,如何控制iframe中主体元素的背景图像和颜色?注意,嵌入的body元素有一个类,iframe是属于我的站点的页面 我之所以需要这样做,是因为我的站点将黑色背景指定给正文,然后将白色背景指定给包含文本的div。所见即所得编辑器在编辑时使用iframe嵌入内容,但它不包含div,因此文本很难阅读 当在编辑器中时,iframe的主体有一个在其他任何地方都没有使用过的类,所以我假设它放在那里,这样类似的问题就可以解决了。但是,当我将样式应用于class.body时,它们不会覆盖应用于body的样式。奇
iframe
中主体元素的背景图像和颜色?注意,嵌入的body元素有一个类,iframe
是属于我的站点的页面
我之所以需要这样做,是因为我的站点将黑色背景指定给正文,然后将白色背景指定给包含文本的div。所见即所得编辑器在编辑时使用iframe
嵌入内容,但它不包含div,因此文本很难阅读
当在编辑器中时,iframe
的主体有一个在其他任何地方都没有使用过的类,所以我假设它放在那里,这样类似的问题就可以解决了。但是,当我将样式应用于class.body
时,它们不会覆盖应用于body的样式。奇怪的是,这些风格确实出现在Firebug中,所以我不知道发生了什么
谢谢
更新-我已经尝试了@mikeq的解决方案,在body的类中添加样式。这在添加到主页样式表时不起作用,但在添加Firebug时起作用。我假设这是因为Firebug应用于页面上的所有元素,而CSS不应用于iFrame中。这是否意味着在使用JavaScript加载窗口后添加css会起作用 一个
iframe
有另一个作用域,因此您无法访问它的样式或使用javascript更改它的内容
基本上是“另一页”
你唯一能做的就是编辑它自己的CSS,因为用你的全局CSS你什么都做不了。除非你有直接访问权,从而拥有源html和/或CSS文件的所有权,否则你不能更改iframe中显示的页面样式
这是为了停止为iframe页面的主体提供一个ID(或类,如果您愿意)
iframe是页面中的一个“洞”,在其中显示另一个网页。iframe的内容不是父页面的任何形状或组成部分 如其他人所述,您的选择是:
- 为正在iframe中加载的文件提供必要的CSS
- 如果iframe中的文件与父对象来自同一域,则可以从父对象访问iframe中文档的DOM
style
元素附加到框架中加载的文档的头部分:
frame.addEventListener(“加载”,ev=>{
const new_style_element=document.createElement(“style”);
new_style_element.textContent=“.my class{display:none;}”
ev.target.contentDocument.head.appendChild(新的\u样式\u元素);
});
您还可以使用
链接元素来引用样式表资源,而不是样式元素。现在可能已更改,但我使用了一个单独的样式表来引用此元素:
.feedEkList iframe
{
max-width: 435px!important;
width: 435px!important;
height: 320px!important;
}
要成功设置嵌入式youtube iFrame的样式,请参阅 此代码使用普通JavaScript。它创建一个新的
元素。它将该元素的文本内容设置为包含新CSS的字符串。它将该元素直接附加到iframe文档的头部
但是,请记住,不允许访问从另一个来源加载的文档的元素(出于安全原因)
iframe
元素的contentDocument
在尝试从嵌入该框架的页面的浏览上下文访问时将计算为null
var iframe = document.getElementById('the-iframe');
var style = document.createElement('style');
style.textContent =
'body {' +
' background-color: some-color;' +
' background-image: some-image;' +
'}'
;
iframe.contentDocument.head.appendChild(style);
覆盖另一个域iframe
CSS
通过使用的一部分,我通过一些Tawk的聊天iFrame实现了这一点(它们很好,但我需要进一步定制)
在这个显示在移动设备上的特定iframe中,我需要隐藏默认图标并放置一个背景图像。我做了以下工作:
Tawk_API.onLoad = function() {
// without a specific API, you may try a similar load function
// perhaps with a setTimeout to ensure the iframe's content is fully loaded
$('#mtawkchat-minified-iframe-element').
contents().find("head").append(
$("<style type='text/css'>"+
"#tawkchat-status-text-container {"+
"background: url(https://example.net/img/my_mobile_bg.png) no-repeat center center blue;"+
"background-size: 100%;"+
"} "+
"#tawkchat-status-icon {display:none} </style>")
);
};
Tawk_API.onLoad=function(){
//如果没有特定的API,您可以尝试使用类似的加载函数
//可能需要设置超时以确保iframe的内容已完全加载
$(“#mtawkchat缩小的iframe元素”)。
contents().find(“head”).append(
$(""+
“#tawkchat状态文本容器{”+
“背景:url(https://example.net/img/my_mobile_bg.png)无重复中心蓝色;”+
“背景大小:100%;”+
"} "+
“#tawkchat状态图标{显示:无}”)
);
};
我不拥有任何Tawk的域,这对我很有用,因此即使它不是来自同一父域,你也可以这样做(尽管Sam回答了)。如果你控制了承载iframe的页面和iframe的页面,你可以向iframe传递一个查询参数
下面是一个示例,根据托管站点是否为移动站点向iframe添加一个类
添加iFrame:
var isMobile=$("mobile").length; //detect if page is mobile
var iFrameUrl ="https://myiframesite/?isMobile=" + isMobile;
$(body).append("<div id='wrapper'><iframe src=''></iframe></div>");
$("#wrapper iframe").attr("src", iFrameUrl );
我有一个问题,我有很多困难找到如何调整我的嵌入式gist。Post manager只允许您编写文本、放置图像和嵌入HTML代码。博客布局本身就是响应性的。它是用Wix建造的。但是,嵌入式HTML不是。我读了很多关于如何在生成的iFrame主体内调整组件大小的文章。因此,我的建议如下:
如果iFrame中只有一个组件,即gist,则只能调整gist的大小。忘掉iFrame吧
我在视口、不同用户代理的特定布局方面遇到问题,这就是解决我问题的原因:
<script language="javascript" type="text/javascript" src="https://gist.github.com/roliveiravictor/447f994a82238247f83919e75e391c6f.js"></script>
<script language="javascript" type="text/javascript">
function windowSize() {
let gist = document.querySelector('#gist92442763');
let isMobile = {
Android: function() {
return /Android/i.test(navigator.userAgent)
},
BlackBerry: function() {
return /BlackBerry/i.test(navigator.userAgent)
},
iOS: function() {
return /iPhone|iPod/i.test(navigator.userAgent)
},
Opera: function() {
return /Opera Mini/i.test(navigator.userAgent)
},
Windows: function() {
return /IEMobile/i.test(navigator.userAgent) || /WPDesktop/i.test(navigator.userAgent)
},
any: function() {
return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
}
};
if(isMobile.any()) {
gist.style.width = "36%";
gist.style.WebkitOverflowScrolling = "touch"
gist.style.position = "absolute"
} else {
gist.style.width = "auto !important";
}
}
windowSize();
window.addEventListener('onresize', function() {
windowSize();
});
</script>
<style type="text/css">
.gist-data {
max-height: 300px;
}
.gist-meta {
display: none;
}
</style>
函数windowSize(){
设gist=document.querySelector('gist92442763');
设isMobile={
Android:function(){
return/Android/i.test(navigator.userAgent)
},
黑莓:函数(){
var isMobile=$("mobile").length; //detect if page is mobile
var iFrameUrl ="https://myiframesite/?isMobile=" + isMobile;
$(body).append("<div id='wrapper'><iframe src=''></iframe></div>");
$("#wrapper iframe").attr("src", iFrameUrl );
//add mobile class if needed
var url = new URL(window.location.href);
var isMobile = url.searchParams.get("isMobile");
if(isMobile == "1") {
$("body").addClass("mobile");
}
<script language="javascript" type="text/javascript" src="https://gist.github.com/roliveiravictor/447f994a82238247f83919e75e391c6f.js"></script>
<script language="javascript" type="text/javascript">
function windowSize() {
let gist = document.querySelector('#gist92442763');
let isMobile = {
Android: function() {
return /Android/i.test(navigator.userAgent)
},
BlackBerry: function() {
return /BlackBerry/i.test(navigator.userAgent)
},
iOS: function() {
return /iPhone|iPod/i.test(navigator.userAgent)
},
Opera: function() {
return /Opera Mini/i.test(navigator.userAgent)
},
Windows: function() {
return /IEMobile/i.test(navigator.userAgent) || /WPDesktop/i.test(navigator.userAgent)
},
any: function() {
return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
}
};
if(isMobile.any()) {
gist.style.width = "36%";
gist.style.WebkitOverflowScrolling = "touch"
gist.style.position = "absolute"
} else {
gist.style.width = "auto !important";
}
}
windowSize();
window.addEventListener('onresize', function() {
windowSize();
});
</script>
<style type="text/css">
.gist-data {
max-height: 300px;
}
.gist-meta {
display: none;
}
</style>