使用javascript打印文件

时间:2018-01-18 22:58:27

标签: javascript iframe printing

我需要使用javascript和iframe动态打印一些文件。文件列表是作为AJAX调用的响应而来的。我无法避免出现此错误:

_SecurityError: Permission denied to access property "document" on cross-origin object_

来自浏览器。这是我的代码的一部分:

$('.js-print_box').html('<iframe class="js-print_frame" name="iprint" src="print?' + params.join('&') + '" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" width="0" height="0"></iframe>');

$('.js-print_box').append(data.preplanFilesContent);

var iframeEls = document.querySelectorAll('.js-print_frame');
if (iframeEls) {
  for (i = 0; i < iframeEls.length; i++) {
    iframeEl = iframeEls[i];
    $(iframeEl).load(function() {
       var result = iframeEl.contentWindow.document.execCommand('print', false, null);
       if (!result) {
         iframeEl.contentWindow.print();
       }
    });
  }
}

2 个答案:

答案 0 :(得分:0)

由于“同源政策”,您将无法修改和访问iframe中的其他网站。如果您正在使用某种类型的MVC,则可能存在可以允许请求iframe的原点的配置。

这是为了防止Cross-site Scripting而实施的。

这是服务器端问题。您需要确定是否可以在服务器端编辑配置以允许原始加载iframe。

您需要在发出请求时将预检请求作为HTTP 200状态代码返回。

如果查看网络标签,您的预检请求可能会失败。 iframe的服务器需要接受“Access-Control-Allow-Origin”标头以及请求的来源(您的页面),作为跨站点请求的可接受来源。

Access-Control-Allow-Origin

CORS Policy

花些时间阅读这些主题可能会让您更好地了解这些技术的工作原理!

答案 1 :(得分:0)

我替换了

的动态iframe
<object data="https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44678.pdf" type="application/pdf">
<iframe src="https://docs.google.com/viewer?url=https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44678.pdf&embedded=true"></iframe>

请参阅此处的代码 https://jsfiddle.net/zwdq69q0/