javascript - 阻止了源为 "http://localhost:8084"的框架访问跨域框架

标签 javascript jquery html jspdf

我正在尝试打印由 jspdf 生成并加载到 iframe 上的 pdf,但我收到了错误消息:

“DOMException:阻止了具有来源的框架” http://localhost:8084 “来自访问跨源框架。”

这是我的代码:

  <iframe id="pdf-prueba" name="pdf-box"></iframe>


function open(){
    var pdf = new jsPDF('p', 'mm', [55, 5]);
    var data = pdf.output('datauristring');
    $('#pdf-box').attr("src", data).load(function(){
        document.getElementById('pdf-box').contentWindow.print();
    });
}

最佳答案

DOMException: Blocked a frame with origin "http://localhost:8084" from accessing a cross-origin frame."

此消息是有效的,因为当您使用 pdf 加载 iframe 时,您使用 datauristring 而不是 blob 设置了 src 属性。

一个简单的解决方案基于:

  • 从 pdf 创建一个 blob(即:pdf.output('blob')..)
  • 将 blob 转换为 URL(即:URL.createObjectURL(blobPDF))

使用您的方法违反了政策,因为协议(protocol) (http/data) 不同:

另一个错误是:

document.getElementById('pdf-box')

您必须使用 id 而不是名称,因此将其更改为:

document.getElementById('pdf-prueba')

以下更改后的代码在 Chrome 中有效:

function open(){
  var pdf = new jsPDF('p', 'mm', [55, 5]);

  var blobPDF = pdf.output('blob');

  var blobUrl = URL.createObjectURL(blobPDF);

  $('#pdf-prueba').attr("src", blobUrl).load(function(e){
    document.getElementById('pdf-prueba').contentWindow.print();
  });
}
<iframe id="pdf-prueba" name="pdf-box"></iframe>

关于javascript - 阻止了源为 "http://localhost:8084"的框架访问跨域框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100205/

相关文章:

javascript - 从 hover 事件中选择 n 个元素

php - Jquery 可排序列表不会序列化,为什么?

css - 使用 CSS 垂直展开 block (模拟纸页)

javascript - 将非继承属性(例如文本颜色)级联到网页中的子元素,而不明确告诉子元素从父元素继承

Javascript:搜索字符串时数组中的多个表达式

javascript - Javascript 的 mustache 渲染问题

javascript - 两个模态弹出窗口;传递 id

jquery - 两个jquery脚本冲突

javascript - 如何在 Javascript 中访问 JSON 对象?

jquery - 如何将 Django 日期格式更改为 dd/mm/yy?