Featherlight,JavaScript 动态内容来源

Featherlight, JavaScript source for dynamic content

我正在评估 Featherlight 灯箱,但我无法实现满足我的用例的代码。我需要一个将用作报告查看器的灯箱,它显示分配给 JavaScript 变量的动态创建的内容。字符串的值是一个有效的 HMTL5 页面。

我查看了 iframe 示例,但它取决于 DOM 中的静态 iframe。那不是我需要的。

我已查看此 GitHub issue and this jsfiddle,但无法成功修改 fiddle 以显示字符串。

这是我要显示的字符串的示例:

var s = '<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Title of the document</title></head><body><p>Content of the document......</p></body></html>';

这可能吗?如果可能的话怎么办?

我预计 $.featherlight() 会在按钮点击时被手动调用。

我想出的解决方案是修改 Featherlight 源代码的 2 个位置,如代码块中所示(当前在第 383 行左右)。

        iframe: {
            process: function(url) {
                var deferred = new $.Deferred();
                var $content = $('<iframe/>')
                    .hide()
                    .attr('src', url)
                    .attr('id', this.namespace + '-id') // [KT] 10/31/2016
                    .css(structure(this, 'iframe'))
                    .on('load', function() {if ($content.show()) {deferred.resolve($content.show()) } else {deferred.resolve($content)} ; })  // [KT] 10/31/2016

                    // We can't move an <iframe> and avoid reloading it,
                    // so let's put it in place ourselves right now:
                    .appendTo(this.$instance.find('.' + this.namespace + '-content'));
                return deferred.promise();
            }
        },

id 属性已添加到 iframe,因此可以通过 JavaScript 添加内容,如下所示:

    var s = '<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Title of the document</title></head><body><p>Content of the document......</p></body></html>';
    var oIframe = document.getElementById('featherlight-id');  // Featherlight's iframe
    var iframeDoc = (oIframe.contentDocument || oIframe.contentWindow.document);
    iframeDoc.open();
    iframeDoc.write(s);
    iframeDoc.close();

这就有效了:

   $.featherlight({iframe: 'about:blank', iframeWidth: '96%' });

需要进行第二次修改,以便 url 'about:blank' 不会引发错误。

我还修改了 css 以使滚动条按需要工作。

编辑: 当 url 为 abount:blank 时 Featherlight 无法打开 iframe 的问题已从 1.5 版开始修复。 1.

编辑 2: 使用 v1.5.1,无需修改 Featherlight 即可将 id 添加到 iframe

    var s = '<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Title of the document</title></head><body><p>Content of the document......</p></body></html>';
    $.featherlight({iframe: 'about:blank'});
    var $iframe = $('.featherlight iframe');
    $iframe.ready(function () {
        $iframe.contents().find("body").append(s);
    });

已接受的 SO answer 用于此解决方案。