Nic*_*nks 3 javascript iframe jquery dom
我对这个问题基本上有相反的问题:如何在注入DOM时阻止iframe加载?
我希望加载一个IFRAME未注入DOM 的元素.
我试图通过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>
Run Code Online (Sandbox Code Playgroud)
问题是调用.trigger('load')生成的IFRAME元素不会GET对src属性URL 产生请求.我希望首先调用默认处理程序,然后我的附加处理程序将触发,并打印iframe的内容,但我的加载处理程序只是立即被调用.
我无法将打印调用附加到iframe的contentDocument.onready事件,因为contentDocument在帧加载之前它是nil.我不知道你是否能在DOM或者如果这是必要的印刷不是焦点的元素,但我在其他地方看到的代码都有了.focus()前述.print()
(我也尝试使用window.frames['printjob'].print(),但我怀疑window.frames['printjob']是零,如果iframe是没有在窗口:)
正如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);
Run Code Online (Sandbox Code Playgroud)
实例(不打印)
诀窍是弄清楚何时将其移除.您可以尝试在收到load事件后X秒将其删除,但这听起来像是在寻找麻烦.
旁注:作为用户,我非常希望在打印之前看到我要打印的内容.但是如果你有一个避免这种情况的用例,也许这会有所帮助.
| 归档时间: |
|
| 查看次数: |
2876 次 |
| 最近记录: |