我需要使用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();
}
});
}
}
答案 0 :(得分:0)
由于“同源政策”,您将无法修改和访问iframe中的其他网站。如果您正在使用某种类型的MVC,则可能存在可以允许请求iframe的原点的配置。
这是为了防止Cross-site Scripting而实施的。
这是服务器端问题。您需要确定是否可以在服务器端编辑配置以允许原始加载iframe。
您需要在发出请求时将预检请求作为HTTP 200状态代码返回。
如果查看网络标签,您的预检请求可能会失败。 iframe的服务器需要接受“Access-Control-Allow-Origin”标头以及请求的来源(您的页面),作为跨站点请求的可接受来源。
花些时间阅读这些主题可能会让您更好地了解这些技术的工作原理!
答案 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/