iframe继承自父级

Rob*_*ben 43 html javascript css iframe jquery

如何<iframe>继承其父级样式和javascript.

我试过了

var parentHead = $("head", parent.document).html();
$("head").html(parentHead);
Run Code Online (Sandbox Code Playgroud)

但是,它剥离了<script>标签.而且,我没有看到影响我的iframe的样式.

我错过了更好/任何其他方法吗?谢谢.

Sha*_*ard 47

您可以通过在iframe中包含此类代码来"继承"父级的CSS:

<head>
<script type="text/javascript">
window.onload = function() {
    if (parent) {
        var oHead = document.getElementsByTagName("head")[0];
        var arrStyleSheets = parent.document.getElementsByTagName("style");
        for (var i = 0; i < arrStyleSheets.length; i++)
            oHead.appendChild(arrStyleSheets[i].cloneNode(true));
    }
}
</script>
</head>
Run Code Online (Sandbox Code Playgroud)

在IE,Chrome和Firefox中为我工作得很好.

关于JavaScript,我找不到直接将父JavaScript添加到iframe的方法,但是你可以添加parent.任何地方来在父代中使用JS,例如:

<button type="button" onclick="parent.MyFunc();">Click please</button>
Run Code Online (Sandbox Code Playgroud)

这将MyFunc在单击按钮时调用父页面中定义的函数.

  • 请注意,您不能跨域执行此操作 - iframe必须是本地的,以便子级能够查询父级的DOM. (21认同)
  • 我认为你应该在父母的头部寻找的元素不是`style`而是`link`. (7认同)

Tob*_*s81 22

这是我添加iframe父级(不是脚本)样式的"最佳"解决方案.它适用于IE6-11,Firefox,Chrome,(旧)Opera,可能无处不在.

function importParentStyles() {
    var parentStyleSheets = parent.document.styleSheets;
    var cssString = "";
    for (var i = 0, count = parentStyleSheets.length; i < count; ++i) {
        if (parentStyleSheets[i].cssRules) {
            var cssRules = parentStyleSheets[i].cssRules;
            for (var j = 0, countJ = cssRules.length; j < countJ; ++j)
                cssString += cssRules[j].cssText;
        }
        else
            cssString += parentStyleSheets[i].cssText;  // IE8 and earlier
    }
    var style = document.createElement("style");
    style.type = "text/css";
    try {
        style.innerHTML = cssString;
    }
    catch (ex) {
        style.styleSheet.cssText = cssString;  // IE8 and earlier
    }
    document.getElementsByTagName("head")[0].appendChild(style);
}
Run Code Online (Sandbox Code Playgroud)