cer*_*key 17 printing iframe jquery
我有一个页面,其中包含一个链接列表和一个div,作为链接所引导页面的占位符.每次用户点击链接时,都会在div中创建iframe,并且其src属性会获取链接href属性的值 - 简单明了,类似于外部网页库.我有什么问题是打印iframe的内容.为此,我使用此代码:
function PrintIframe()
{
frames["name"].focus();
frames["name"].print();
}
问题似乎是iframe是由JQuery动态创建的 - 当我将iframe插入到html代码中时,浏览器会打印外部页面.但是用JavaScript注入相同的代码没有任何反应.我试图在"打印"链接上使用JQ 1.3'live'事件,但没有成功.有办法克服这个问题吗?
Far*_*uti 33
假设这是你的iframe看起来像:
<iframe id='print-iframe' name='print-frame-name'></iframe>
Run Code Online (Sandbox Code Playgroud)
这是你使用jQuery的方法:
$("#print-iframe").get(0).contentWindow.print();
Run Code Online (Sandbox Code Playgroud)
这就是你使用原生JavaScript的方式:
document.getElementById("print-iframe").contentWindow.print();
Run Code Online (Sandbox Code Playgroud)
我在打印iframe的内容时遇到了问题.为了实现此目的,请使用以下代码:
例如,你有iframe:
<iframe id='print-iframe' name='print-iframe'></iframe>
Run Code Online (Sandbox Code Playgroud)
然后js打印iframe的内容调用此函数(在ie和其他浏览器中都有效):
printIframe('print-iframe');
Run Code Online (Sandbox Code Playgroud)
功能代码:
function printIframe(iFrameId) {
var ua = window.navigator.userAgent;
var msie = ua.indexOf ("MSIE ");
var iframe = document.getElementById(printFrameId);
if (msie !== 0) {
iframe.contentWindow.document.execCommand('print', false, null);
} else {
iframe.contentWindow.print();
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了这个并且能够复制这个问题.我注意到的是,在调用print函数时iframe没有完成加载.我通过在调用PrintIFrame()时检查innerHTML的值来测试它.要解决此问题,您可以使用setTimeOut在x毫秒后再次调用该函数:
function PrintIframe() {
if (window.frames['myname'].innerHTML != "") {
window.frames['myname'].focus();
window.frames['myname'].print();
} else {
setTimeout(PrintIframe,1000);
}
}
Run Code Online (Sandbox Code Playgroud)
这对我有用
编辑 奇怪 - 我的测试代码中有一个警报,似乎使它工作.当我把它拿出来时,它没有用.对不起:(
无论如何,这应该使用jQuery将加载事件处理程序附加到iframe.我已经在IE8上测试了它的工作原理:
<html>
<head>
<script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
function loadiFrame(src)
{
$("#iframeplaceholder").html("<iframe id='myiframe' name='myname' src='" + src + "' />");
}
$(function()
{
$("#printbutton").bind("click",
function() {
loadiFrame('test.aspx');
$("#myiframe").load(
function() {
window.frames['myname'].focus();
window.frames['myname'].print();
}
);
}
);
});
</script>
</head>
<body>
<input type="button" id="printbutton" value="Load iFrame" />
<div id="iframeplaceholder"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72705 次 |
| 最近记录: |