Angularjs 中用于 iframe 的打印功能

Posted

技术标签:

【中文标题】Angularjs 中用于 iframe 的打印功能【英文标题】:Print functionality in Angularjs for iframe 【发布时间】:2018-07-24 23:57:55 【问题描述】:

我必须打印iframe 中的特定文件。

我的 view_file.ejs:

<div id="viewframe"> 
<iframe id="viewfile"  name="viewfile" src='https://docs.google.com/viewer?url=<%= urlencode.encode(img) %>&embedded=true' style="width: 100%;height:900px" frameborder="0" scrolling="no" seamless="" allowfullscreen="allowfullscreen">
</iframe>
</div>

这里的 img(这是我在 urlencode.encode 中使用的变量)是来自 aws s3 存储桶的链接

打印按钮:

<div class="right_blk">
                    <span class="versions"><a ng-click="printdoc('viewframe')" href="javascript:void(0)" >Print</a></span>   
</div>

我的 app.js:

$scope.printdoc1=function(doc)


   window.frames["viewfile"].focus();
   window.frames["viewfile"].print();

我从这里尝试了许多解决方案,但对我没有任何作用。有什么办法吗?

更新

core.js:124 DOMException: Blocked a frame with origin "http://localhost:3000" from accessing a cross-origin frame.
    at b.$scope.printdoc (http://localhost:3000/js/docapp.js:46:32)
    at fn (eval at compile (http://localhost:3000/js/core.js:242:306), <anonymous>:4:162)
    at e (http://localhost:3000/js/core.js:287:342)
    at b.$eval (http://localhost:3000/js/core.js:150:347)
    at b.$apply (http://localhost:3000/js/core.js:151:52)
    at htmlAnchorElement.<anonymous> (http://localhost:3000/js/core.js:287:394)
    at HTMLAnchorElement.dispatch (http://localhost:3000/js/jquery-3.2.1.min.js:3:10316)
    at HTMLAnchorElement.q.handle (http://localhost:3000/js/jquery-3.2.1.min.js:3:8343)

我收到此错误。

【问题讨论】:

看看这个:***.com/questions/19637312/… 感谢您的回复@KishorVelayutham 链接源已仅在 iframe 中,并且也出现跨源错误 【参考方案1】:
<iframe id="viewfile"  name="viewfile" src='https://docs.google.com/viewer?url=<%= urlencode.encode(img) %>&embedded=true' style="width: 100%;height:900px" frameborder="0" scrolling="no" seamless="" allowfullscreen="allowfullscreen">

不要将 id 作为参数传递,而是这样做:

 <span class="versions"><a  ng-click="printdoc()" href="javascript:void(0)" >Print</a></span>

这就是你使用 Javascript 的方式:

function printdoc()

   document.getElementById("viewfile").contentWindow.print(); //Iframe id

如果是 Jquery:

$("#viewfile").get(0).contentWindow.print();

试试这个。希望对您有所帮助..!

【讨论】:

谢谢你..我会试试这个,让你知道 仍然收到此错误“阻止具有来源“localhost:3000”的框架访问跨域框架。”我已经用那个错误更新了我的问题 我认为它与安全有关。请点击此链接:***.com/questions/25098021/…。可能会解决您的问题。

以上是关于Angularjs 中用于 iframe 的打印功能的主要内容,如果未能解决你的问题,请参考以下文章

如何下载在 AngularJS 中开发的呈现 iframe 的网页作为 PDF 文件?

在 IE 中打印 iframe

在 Angularjs 中持久化 iframe

在 AngularJS 中刷新 iframe 内容

是否可以在 iframe 中更新 angularjs 表达式?

如何让 angularJS 动态内容显示在 iframe 中?