gpt4 book ai didi

javascript - 加载 iframe 而不将其注入(inject) DOM

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:37:01 25 4
gpt4 key购买 nike

我的问题基本上与这个问题相反:How to prevent iframe from loading when injected into the DOM?我希望加载未注入(inject) DOM 的 IFRAME 元素。

我正在尝试通过 javascript 打印页面。目标是避免必须导航链接、发出打印命令并返回导航。

我可以使用 jQuery。

// fake table that illustrates pertanent DOM
<table class=diary><tr><td data-job=12345 contextmenu=job_menu><a href=/jobs/12345>view job 12345</a></table>

// real code
<menu type="context" id="job_menu">
<menuitem label="Print Job" onclick="PrintJob(); return false;"></menuitem>
</menu>
<script type="text/javascript">
var target = null;

function PrintJob()
{
var job_no = $(target).data('job');
if(job_no > 0) {
$('<iframe name="printjob" src="/jobs/'+job_no+'">').load(function () {
this.focus();
this.print();
})
.trigger('load');
}
}

$('.diary').bind('contextmenu', function (ev) {
var td = ev.target;
while(td && td.nodeName != 'TD')
td = td.parentNode;
target = td;
});
</script>

问题是在生成的 IFRAME 元素上调用 .trigger('load') 不会导致 GET 请求 src 属性 URL。我希望首先调用默认处理程序,然后触发我附加的处理程序,并打印 iframe 的内容,但我的加载处理程序只是立即被调用。

我无法将打印调用附加到 iframe 的 contentDocument.onready 事件,因为在加载框架之前 contentDocument 为 nil。我不知道你是否可以聚焦一个不在 DOM 中的元素,或者它是否是打印所必需的,但我在其他地方看到的代码都有 .focus().print( )(我也尝试使用 window.frames['printjob'].print(),但我怀疑如果 iframe 不是,则 window.frames['printjob'] 为 nil还在窗口:)

最佳答案

正如 Tom van der Woerdt 所说,除非将 iframe 添加到 DOM,否则它不会加载。

但这并不意味着它必须加载到用户可以看到的任何地方:

$('<iframe name="printjob" src="/jobs/'+job_no+'">')
.load(function() {
this.focus();
this.print();
})
.css({position: "absolute", left: "-10000px", top: "0px"})
.appendTo(document.body);

Live example (不打印)

诀窍是找出何时删除它。您可以尝试在收到 load 事件 X 秒后删除它,但这听起来像是自找麻烦。


旁注:作为用户,我非常更喜欢在打印之前查看要打印的内容。但如果您有避免这种情况的用例,也许这会有所帮助。

关于javascript - 加载 iframe 而不将其注入(inject) DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8340324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com