使用JavaScript打印HTML对象标记的内容
我目前正在尝试创建一个方法,该方法调用浏览器的打印功能来打印嵌入在我的页面中的使用JavaScript打印HTML对象标记的内容,javascript,jquery,html,d3.js,Javascript,Jquery,Html,D3.js,我目前正在尝试创建一个方法,该方法调用浏览器的打印功能来打印嵌入在我的页面中的文档内容。已经包含了D3.js和jQuery库。我希望实现这一目标的过程如下: <head> <script type="text/javascript"> var floatButton = d3.select("body").append("div") .attr("class", "printbutton") $(".printbutton").click
文档
内容。已经包含了D3.js和jQuery库。我希望实现这一目标的过程如下:
<head>
<script type="text/javascript">
var floatButton = d3.select("body").append("div")
.attr("class", "printbutton")
$(".printbutton").click(function() {
var Popup = window.open(URL);
$(Popup.document).load(function() {
document.getElementsByTagName('svg')[0].style.opacity = 1;
window.print();
window.close();
});
});
</script>
</head>
<body>
<object id="Graph_Container" data="URL" type="image/svg+xml"></object>
</body>
另一种方法是在父页面上解析根目录中的XML结构,这样我就不需要打开新页面,但我已经能够对此了如指掌了
关于如何在对象
标记内打印文档
的任何提示/想法,我将不胜感激
已更新
window.name = "PersistWindow";
$(".printbutton").click(function() {
debugger;
Popup = window.open(URL, "TempWindow");
$(Popup.document).load(function() {
Popup.document.getElementsByTagName('svg')[0].style.opacity = 1;
window.print();
window.close();
});
});
window.open()
函数可以接受另一个参数,即窗口名。首先,为当前窗口指定一个名称,如window.name=“persistents”然后,对于弹出窗口,您可以指定类似于popup=window.open(URL,“popped”)
这将确保刚刚打开的URL不会替换您正在运行的代码,并且Popup
变量允许您访问弹出窗口中所需的任何内容——例如,使用Popup.document
访问文档对象
我将在下面的评论中补充这一点。可以将代码分为两个不同的函数。一个保存window.open()
指令,另一个——我们称之为“操纵器()”——保存代码以访问文档对象并处理该数据。在许多情况下,浏览器不会立即执行JavaScript要求它执行的操作;它等待当前运行的JavaScript函数结束,然后再执行该操作。这意味着您需要一种将第一个函数连接到第二个函数的方法,最简单的方法是通过setTimeout()
。例如,在调用window.open()
之后,可以指定setTimeout(“操纵器();”,250)
,然后从第一个函数执行返回
manipular()
函数将在1/4秒后调用,但在运行之前,浏览器将执行window.open()
操作。因此,当操纵器()
函数运行时,您将能够在其中访问刚刚打开的窗口的文档对象,并使用该数据执行操作。(请注意,这种在不同函数之间划分工作的方式是全局变量在JavaScript中非常有用的一个主要原因--“Popup”在这里应该是全局变量。)这与var Popup=window.open(URL)
然后$(Popup.document).load
有何不同?在这种情况下,Popup
是否与handl
一样?我是不是应该通过name
而不是var
来调用?区别不在于Popup
和handl
;区别在于window.open(URL)代码>vs窗口打开(URL,“弹出”)代码>--并确保“popped”是与调用window.open()
的窗口名称不同的窗口名称。默认情况下,window.open()
将在现有窗口中打开一个新页面,这将替换您正在运行的JavaScript以打开该新页面。我将编辑我的答案以删除handl
。更新我的代码。直到$(popup.document)之后,才会加载弹出窗口。调用load
,因此跳过.load
中的脚本。抱歉,我忘记了这一点。JavaScript可以告诉浏览器做某事,但浏览器通常在JavaScript函数结束后才做,JavaScript函数包含了告诉浏览器做某事的指令。您应该调用setTimeout(“操纵器();”,250)调用window.open()
后的code>。然后让该函数结束/返回。“操纵器”函数将在1/4秒后被调用,在该函数中,您将访问刚刚打开的窗口的文档对象。欢迎使用。抱歉,我之前没有考虑过需要给浏览器一个机会,让它真正做你想让它做的事情,然后你才能做一些假设浏览器已经做了的事情。
window.name = "PersistWindow";
$(".printbutton").click(function() {
debugger;
Popup = window.open(URL, "TempWindow");
$(Popup.document).load(function() {
Popup.document.getElementsByTagName('svg')[0].style.opacity = 1;
window.print();
window.close();
});
});