<script type="text/javascript">
function printDoc() {
document.getElementById("frame_singleCheque").contentWindow.print();
}
</script>
<iframe style ="height:400px; width: 750px; overflow:scroll;" id="frame_singleCheque" src="http://www.w3schools.com"></iframe>
<input type="button" id = "btnCPrint" value = "Print" onclick="javascript:printDoc()" />
错误
[16:41:44.054] Error: Permission denied to access property 'print' @ http://localhost/pdf/print.php:3
我已经验证了很多用于打印iframe内容的堆栈建议线程。但对我来说,那些没有用。
上面的代码只出现在我的print.php文件中。我想打印iframe内容。
另外我想知道,如何打印iframe中存在的特定div。此iframe中的示例“class ='example_code notranslate'”。
答案 0 :(得分:3)
您可以通过将跨域iframe嵌套在本地托管的iframe中来完美地打印跨域iframe页面。 “代理iframe”。
通过这种方式,父javascript可以打印代理iframe而不会出现问题,因为它是本地的,它将传递打印来自另一个域的内部iframe。
这项技术有效,并经过我自己的验证。
在您的容器页面中,像这样托管iframe
<iframe id="printf" name="printf" class="A4" src="/SomeController/IFrameProxy?url=TARGETURL"></iframe>
代理iframe应该像这样
@model string
<html>
<head>
<title>IFrame Proxy</title>
<style>
html, body, iframe {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
border-style: none;
}
</style>
</head>
<body>
<iframe src="@Model" seamless></iframe>
</body>
</html>
打印iframe(在容器页面上定义)的javascript应如下所示:
function printFrame() {
var frm = document.getElementById("printf").contentWindow;
frm.focus();// focus on contentWindow is needed on some ie versions
frm.print();
}
答案 1 :(得分:-1)
看起来你在这里有一个非常标准的跨域iframe问题 - 即浏览器的设计使你无法做到这一点。我可以提出很多捏造,但很大程度上,iframe是解决这个问题的错误方法。
基本上,您最好的选择是刮取页面 - 发出http请求并解析您想要的内容。然后,您可以将其作为您自己页面的DOM的一部分进行交互。
答案 2 :(得分:-1)