javascript - 将链接附加到 iframe 的头部

标签 javascript jquery css iframe fancybox

我想将元素追加到 Iframe 的头部(花式框)

有一个奇怪的问题:当我在将元素附加到 Head 的代码行上使用 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" } )); 

但是还是不行

谢谢

最佳答案

好吧,这似乎确实是加载 iframe 和在其中查找元素之间的竞争条件(正如 olsn 在他的评论中指出的那样),如果第二个先出现,则失败 ;)

作为解决方法,您可以使用 .load()等待 iframe 的方法在尝试之前完全加载 append <head> 的样式表部分。

这段代码应该可以解决问题:

$(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);
            });
        }
    });
});

注意 :这是针对 fancybox v1.3.4 的。幸运的是,v2.x 包含比 v1.3.4 更灵活的公共(public)方法来规避这个问题,比如 afterLoadbeforeShow

另请注意 setTimeout()也可以工作,但它呈现得很奇怪。

关于javascript - 将链接附加到 iframe 的头部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16241296/

相关文章:

javascript - 将 img src 替换为 data-img

Css如何去除空行

javascript - 创建心形进度加载器 | react 堆

javascript - 在javascript之后跳过html表中的第一行

javascript - 当尝试从 Google Places API 提取城市时,为什么我的自动完成搜索文件会卡住?

html - 由于位置 :relative, Bootstrap 网页已禁用输入

javascript - 为什么 Bootstrap 5 中的崩溃不能从示例中运行?

javascript - 读取数据对象的单元格内容

jquery - IE10 - 选择要上传的文件后必须单击 2 次才能提交表单

javascript - 使用 Jquery 检查 html 元素是否覆盖了不同 z-index 的另一个元素