使用CSS来影响iframe中的div样式

250 css iframe

是否可以仅使用CSS更改驻留在页面上iframe内的div的样式?

Dio*_*ane 111

你需要JavaScript.它与在父页面中执行的操作相同,除非您必须在JavaScript命令前添加iframe的名称.

请记住,相同的原始策略适用,因此您只能对来自您自己的服务器的iframe元素执行此操作.

我使用Prototype框架使其更容易:

frame1.$('mydiv').style.border = '1px solid #000000'
Run Code Online (Sandbox Code Playgroud)

要么

frame1.$('mydiv').addClassName('withborder')
Run Code Online (Sandbox Code Playgroud)

  • 那是正确的.Iframe内容受相同域策略的约束.如果它来自您的域名,您可以控制它,如果没有,您就被锁定了.这可以防止各种基于iframe的页面劫持. (15认同)
  • 看到我的这个问题它类似http://stackoverflow.com/questions/1962707/how-to-give-style-to-iframed-page-content-using-parent-pages-css但我们不能改变风格如果框架来自另一台服务器? (2认同)
  • 不完全是"仅CSS"解决方案,但对我来说足够好.+1 (2认同)
  • 这不是CSS。 (2认同)

mma*_*tax 94

总之没有.

您不能将CSS应用于iframe中加载的HTML,除非您因跨域资源限制而控制iframe中加载的页面.

  • 这是事实,但并不能真正帮助人们举例说明如何做 (49认同)

Eug*_*eld 44

是.有关详细信息,请查看此其他主题: 如何将CSS应用于iframe?

var cssLink = document.createElement("link");
cssLink.href = "style.css";  
cssLink.rel = "stylesheet";  
cssLink.type = "text/css";  
frames['frame1'].document.body.appendChild(cssLink); 
Run Code Online (Sandbox Code Playgroud)

  • 是的,frame1是iframe的id. (5认同)
  • frame1是iframe的id? (4认同)
  • 如果我们要在iframe中加载其他域,则无法执行此操作。 (3认同)
  • 这不是CSS。 (2认同)

Riy*_*eed 14

您可以检索第一个内容,iframe然后jQuery像往常一样使用选择器.

$("#iframe-id").contents().find("img").attr("style","width:100%;height:100%")

$("#iframe-id").contents().find("img").addClass("fancy-zoom")

$("#iframe-id").contents().find("img").onclick(function(){ zoomit($(this)); });
Run Code Online (Sandbox Code Playgroud)

祝好运!

  • 不起作用:未捕获DOMException:无法从'HTMLIFrameElement'读取'contentDocument'属性:阻止具有原点"http:// HOST"的帧访问跨源帧. (8认同)

Jus*_*nte 9

快速回答是:不,抱歉.

只使用CSS是不可能的.您基本上需要控制iframe内容才能设置样式.有些方法使用javascript或你选择的网络语言(我已经阅读了一些,但我不熟悉自己)动态插入一些所需的样式,但你需要直接控制iframe内容,它听起来就像你没有.


Pri*_*pta 8

使用Jquery并等到源加载,这是我已经实现的(使用角度间隔,你可以使用javascript setInterval方法):

var addCssToIframe = function() {
    if ($('#myIframe').contents().find("head") != undefined) {
        $('#myIframe')
                .contents()
                .find("head")
                .append(
                        '<link rel="stylesheet" href="app/css/iframe.css" type="text/css" />');
        $interval.cancel(addCssInterval);
    }
};
var addCssInterval = $interval(addCssToIframe, 500, 0, false);
Run Code Online (Sandbox Code Playgroud)


ada*_*amj 6

显然可以通过 jQuery 来完成:

$('iframe').load( function() {
    $('iframe').contents().find("head")
      .append($("<style type='text/css'>  .my-class{display:none;}  </style>"));
});
Run Code Online (Sandbox Code Playgroud)

/sf/answers/977188551/

  • 由于 Chrome 浏览器中的同源政策,您无法再使用此功能。错误消息:“未捕获 DOMException:无法从“HTMLIFrameElement”读取“contentDocument”属性:阻止了具有 **** 的框架访问跨源框架。” (8认同)
  • 如果您不使用域外其他网页的内容,那么这是一个很好的答案,但如果您正在处理与您自己的页面相关的内容,那么这是一个完美的答案。就像将图像上传到 iframe 中一样,这是一个很好的解决方案。谢谢你@adamj (2认同)

Ram*_*ush 6

结合不同的解决方案,这对我有用。

$(document).ready(function () {
    $('iframe').on('load', function() {
        $("iframe").contents().find("#back-link").css("display", "none");
    }); 
});
Run Code Online (Sandbox Code Playgroud)