当前位置:  开发笔记 > 编程语言 > 正文

如何将CSS应用于iframe?

如何解决《如何将CSS应用于iframe?》经验,为你挑选了16个好方法。

我有一个简单的页面,有一些iframe部分(显示RSS链接).如何将主页面中的相同CSS格式应用于iframe中显示的页面?



1> Tamas Czineg..:

编辑:除非设置了适当的CORS标头,否则这不适用于跨域.

这里有两个不同的东西:iframe块的样式和嵌入在iframe中的页面样式.您可以通常的方式设置iframe块的样式:


嵌入在iframe中的页面样式必须通过将其包含在子页面中来设置:


或者它可以使用Javascript从父页面加载:

var cssLink = document.createElement("link");
cssLink.href = "style.css"; 
cssLink.rel = "stylesheet"; 
cssLink.type = "text/css"; 
frames['iframe1'].document.head.appendChild(cssLink);


只是这样no1否则必须测试它才能找出:正确,它不适用于跨域.执行frame ['name']后,您会立即得到"不安全的JavaScript尝试使用URL blah从帧中获取URL blah.域,协议和端口必须匹配."
链接*可能只出现在HEAD中*
请注意,在我看来,之前发布的一些示例现在对html5无效.您可以按如下方式访问框架的内容:`document.getElementById("myframe").contentDocument`.虽然嵌入css似乎对我不起作用.
这实际上是跨域工作吗?我认为不会.
只有当我做了`... document.head.appendChild(cssLink)` - Firefox和Safari时才为我工作.
在我的情况下,它显示此错误:frames.frame1.document未定义

2> SequenceDigi..:

我在Google日历中遇到了这个问题.我想在较暗的背景上设计它并改变字体.

幸运的是,嵌入代码中的URL对直接访问没有限制,因此通过使用PHP函数file_get_contents,可以从页面获取整个内容.可以调用位于服务器上的php文件,而不是调用Google URL.google.php,其中包含原始内容并进行修改:

$content = file_get_contents('https://www.google.com/calendar/embed?src=%23contacts%40group.v.calendar.google.com&ctz=America/Montreal');

添加样式表的路径:

$content = str_replace('','', $content);

(这会将样式表放在head结束标记之前.)

如果css和js相对调用,请指定原始URL的基本URL:

$content = str_replace('','', $content);

最终google.php文件应如下所示:

','', $content);
$content = str_replace('','', $content);
echo $content;

然后将iframe嵌入代码更改为:


祝好运!


如果你愿意,可以按定义调用该黑客.但是你没有提供任何更好的解决方案......这种解决方案不是一种破坏谷歌服务或欺骗人们以利用其弱点的方法.
仅供参考,这基本上是黑客攻击.
通过这样做,您始终将日历作为未登录的用户.使用普通的html iframe,如果用户登录谷歌,他们会看到他们自己的个人日历,但由于您的PHP代码无法知道用户的Google会话ID,因此无法获取他们的个人日历.
@ChrisHoughton FYI,它基本上不是.但是,它可能会使整个iframe变得毫无意义(例如,使用iframe的一个原因是出于安全目的,例如使用卡支付,如果您执行此处建议的操作,则可能会导致问题).
我会杀死一种让这个解决方案与谷歌文档一起工作的方法.它抛出各种javascript错误."未捕获的TypeError:无法读取未定义的属性'a'

3> Horst Gutman..:

如果iframe的内容不完全在您的控制之下,或者您想要使用不同样式访问不同页面中的内容,则可以尝试使用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);

请注意,根据您使用的浏览器,这可能仅适用于来自同一域的网页.


可能值得注意的是,如果页面位于不同的域中,相同的源策略将停止此工作.
在同一思路但更简洁:`