Javascript 将链接附加到Iframe的头部

Javascript 将链接附加到Iframe的头部,javascript,jquery,css,iframe,fancybox,Javascript,Jquery,Css,Iframe,Fancybox,我想将元素附加到Iframe(fancybox)的头部 有一个奇怪的问题:当我使用Firefox在代码行的断点上添加元素到头部时,它工作正常,但当我在没有firebug的情况下正常运行站点时,它不工作 我使用的是fancybox 1.3.4,代码在onComplete事件中运行 var cssLink = document.createElement("link") cssLink.href = "/themes/furniture/css/test.css"; cssLink .rel =

我想将元素附加到Iframe(fancybox)的头部

有一个奇怪的问题:当我使用Firefox在代码行的断点上添加元素到头部时,它工作正常,但当我在没有firebug的情况下正常运行站点时,它不工作

我使用的是fancybox 1.3.4,代码在onComplete事件中运行

var cssLink = document.createElement("link") 
cssLink.href = "/themes/furniture/css/test.css"; 
cssLink .rel = "stylesheet"; 
cssLink .type = "text/css"; 


var f123= document.getElementById('fancybox-frame');

var d123= f123.contentDocument || f123.contentWindow.document;

d123.head.appendChild(cssLink); 
更新

我也尝试了这个代码

var $head = $("#fancybox-frame").contents().find("head");                
$head.append($("<link/>", 
{ rel: "stylesheet", href: "/themes/furniture/css/test.css", type: "text/css" } )); 
var$head=$(“#fancybox frame”).contents().find(“head”);
$head.append($(“”),
{rel:“样式表”,href:“/themes/furniture/css/test.css”,键入:“text/css”});
但它也不起作用


Tnx

好吧,在加载iframe和查找iframe内部元素之间,这似乎确实是一种竞赛状态(正如他在评论中指出的那样),如果第二个元素先出现,则会失败;)

作为一种解决方法,您可以使用
.load()
方法等待
iframe
完全加载,然后再尝试
将样式表附加到
部分

这段代码应该做到以下几点:

$(document).ready(function () {
    $(".fancybox").fancybox({
        "type": "iframe",
        "onComplete": function () {
            var $style = '<link rel="stylesheet" href="/themes/furniture/css/test.css" type="text/css" />';
            $("#fancybox-frame").load(function () {
                $(this).contents().find("head").append($style);
            });
        }
    });
});
$(文档).ready(函数(){
$(“.fancybox”).fancybox({
“类型”:“iframe”,
“onComplete”:函数(){
var$style='';
$(“#fancybox帧”).load(函数(){
$(this.contents().find(“head”).append($style);
});
}
});
});
注意:这是针对fancybox v1.3.4的。幸运的是,v2.x包含了比v1.3.4更灵活的公共方法来避免这个问题,比如
afterLoad
beforeShow


还请注意,
setTimeout()
也会起作用,但它的渲染方式很奇怪。

好吧,在加载iframe和查找其中的元素之间,这似乎确实是一种竞速状态(正如他在评论中指出的),如果第二个元素先出现,则会失败;)

作为一种解决方法,您可以使用
.load()
方法等待
iframe
完全加载,然后再尝试
将样式表附加到
部分

这段代码应该做到以下几点:

$(document).ready(function () {
    $(".fancybox").fancybox({
        "type": "iframe",
        "onComplete": function () {
            var $style = '<link rel="stylesheet" href="/themes/furniture/css/test.css" type="text/css" />';
            $("#fancybox-frame").load(function () {
                $(this).contents().find("head").append($style);
            });
        }
    });
});
$(文档).ready(函数(){
$(“.fancybox”).fancybox({
“类型”:“iframe”,
“onComplete”:函数(){
var$style='';
$(“#fancybox帧”).load(函数(){
$(this.contents().find(“head”).append($style);
});
}
});
});
注意:这是针对fancybox v1.3.4的。幸运的是,v2.x包含了比v1.3.4更灵活的公共方法来避免这个问题,比如
afterLoad
beforeShow


还请注意,
setTimeout()
也可以,但它的呈现方式很奇怪。

我想将元素附加到Iframe的头部,这很好,但是您的代码在哪里?好啊我插入代码。当我在firebug上使用断点,但在正常运行站点时不附加子项时,代码正常工作。即使您使用的是onComplete,您是否尝试过使用超时?对我来说,这似乎是一种竞赛状态——其他浏览器如何?如果只是FireFox的问题,请在onComplete之后使用额外的
setTimeout(…,50)
,看看是否有效。(它是丑陋的,但是如果它工作,我将与它)和什么代码你插入到FANYBOX iFrAME(显示你的OnEndoit init)BTW,与IFRAMS一起工作,出于安全原因,你应该考虑<代码>我想追加元素到iFrAME的头部,这很好,但是你的代码在哪里?好啊我插入代码。当我在firebug上使用断点,但在正常运行站点时不附加子项时,代码正常工作。即使您使用的是onComplete,您是否尝试过使用超时?对我来说,这似乎是一种竞赛状态——其他浏览器如何?如果只是FireFox的问题,请在onComplete之后使用额外的
setTimeout(…,50)
,看看是否有效。(它是丑陋的,但如果它工作,我将与它)和什么代码你插入到FANYBOX iFrAME(显示你的OnEndoit init)BTW,与IFRAMS一起工作,出于安全原因,你应该考虑TNX。试试它,但是当用Fixbug调试时,加载()内的代码不执行。只需跳过它。Tnx。尝试一下,但当使用firebug进行调试时,load()中的代码不会执行。跳过它就行了。