加载iframe而不将其注入DOM
Loading an iframe without injecting it into the DOM
我基本上遇到了与这个问题相反的问题:如何防止iframe在注入DOM时加载?我希望加载一个未注入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')
不会导致对src
属性URL的GET
请求。我希望先调用默认的处理程序,然后启动附加的处理程序并打印iframe的内容,但我的加载处理程序只是立即被调用。
我无法将打印调用附加到iframe的contentDocument.onready
事件,因为在加载帧之前,contentDocument
为零。我不知道是否可以将不在DOM中的元素集中,或者这是否是打印所必需的,但我在其他地方看到的代码都在.print()
之前有.focus()
(我也尝试过使用window.frames['printjob'].print()
,但如果iframe还不在窗口中,我怀疑window.frames['printjob']
为零:(
正如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);
实时示例(不打印(
诀窍是弄清楚何时删除它。你可以在收到load
事件后X秒尝试删除它,但这听起来像是在找麻烦。
附带说明:作为一名用户,我非常喜欢在打印之前先看看我要打印的内容。但如果你有避免这种情况的用例,也许这会有所帮助。
回答你的实际问题:你不能。如果不将<iframe>
插入DOM,则不会加载它。
相关文章:
- 注入的HTML仅在Dom中解释为字符串
- 将Backbone.View重新注入DOM,保留事件而不是创建新事件
- chrome扩展在加载dom之前注入动态css
- 是通过JS注入的DOM元素
- 使用 Directives 注入 DOM 元素 AngularJS
- 在通过AJAX加载的DOM中运行动态注入的javascript(尝试使用历史记录ajax化网站.js)
- 避免使用 requirejs 加载已经注入到 DOM 中的模块
- 是否可以将javascript注入使用ajax调用后加载的dom
- 与<选择>以及DOM注入
- 经过大量JS DOM注入/操作后的DOM验证
- Chrome扩展:将元素追加到DOM中没有立即出现的新注入的元素中
- 使用DOM注入动态预取资源是否有效或有意义
- 是一个ReactJS渲染函数,注入了全部或部分添加的DOM元素
- 你怎么能要求DOM在Angular注入正确的变量之前不加载图片呢?
- 加载iframe而不将其注入DOM
- 当注入javascript代码覆盖DOM中存在的代码时,会出现问题
- Chrome扩展:连接"内容脚本"注入DOM
- 在JSON内部创建链接,并通过AngularJS将其注入dom
- 如何在新对象被注入DOM后使用jQuery
- 在页面加载时将部分注入DOM