我可以将 CSS 应用于 iframe 中的元素吗?

Posted

技术标签:

【中文标题】我可以将 CSS 应用于 iframe 中的元素吗?【英文标题】:Can I apply CSS to the elements within an iframe? 【发布时间】:2011-03-18 04:51:56 【问题描述】:

我经常看到网站使用包含外部网站的 iframe,以及包含供用户使用的 JavaScript 功能的顶部框架。

例如用户分析软件、Digg 栏等...


对于类似的东西进行实验有什么技巧吗? =) 知道会很棒

【问题讨论】:

【参考方案1】:

不,不是来自 iframe 外部<iframe> 是它自己的世界。如果域等匹配,则 javascript 可以进出通信,并且可以(如果愿意)将 CSS 注入子框架。

如果<iframe> 包含来自不同域的内容,那么您几乎无能为力。父页面控制框架的大小和是否可见,并且可以通过定位等方式将自己的内容over放在框架上,但不能直接影响实际框架内容的呈现方式。

【讨论】:

非常感谢!如果域与主机页面完全相同怎么办? 如果您在同一个域中,则父页面中的 Javascript 可能会混淆框架的内容。父页面 CSS 不会影响框架页面,但 Javascript 可以更改 CSS 或更改元素样式等。 是否有使用人们所说的一些技术来做到这一点.. 嵌入一个子 iframe 或 postMessage 或其他东西? pipwerks.com/2008/11/30/…johan.driessen.se/posts/resizing-cross-domain-iframes【参考方案2】:

如果它是同一个域,您可以使用 javascript 干扰 iframe 内容,如下所示。 假设 iframe 的 id 是IframeId。并且您想更改 id 为“elementId”的元素的颜色。

$("iframe").load(function() 
   var frameContents;
   frameContents = $("#IframeId").contents(); 
   frameContents.find("#elementId").css("color","#fff");
);

【讨论】:

【参考方案3】:

这可以通过将 CSS 链接注入 iframe 的 Header 来实现:

    // this function will inject the link to CSS into iframe header
    function loadCSSToiFrame(iframeId, filename) 
       var file = document.createElement("link");
       file.setAttribute("rel", "stylesheet");
       file.setAttribute("type", "text/css");
       file.setAttribute("href", filename);
       document.getElementById(iframeId).contentWindow.document.head.appendChild(file);
    
  
    // just call a function to load your CSS
    // this path should be relative your html location
    loadCSS("iframe_id", "stylesheet.css");

【讨论】:

以上是关于我可以将 CSS 应用于 iframe 中的元素吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何将样式应用于页面 iframe 内的 div? [复制]

有没有办法将编写在代码镜像中的 css 应用于 iframe 的 html 内容?

可以将 SVG 剪辑路径相对于其容器居中吗?

使用页面 .css 文件将 CSS 添加到 iframe 元素 [重复]

我可以使用 CSS 过渡为绝对定位元素设置动画吗?

将 css 应用于 html 但不是 iframe html