从父HTML使用Google Datastudio打印iframe

时间:2019-07-16 02:54:18

标签: html iframe cors google-data-studio

我嵌入了一个Data Studio仪表板,我想添加一个功能来打印该仪表板,但似乎由于CORS限制,无法做到这一点

有任何解决方法吗? 我发现了这个,但似乎没有用 print a pdf via iframe (cross domain)

我有这个

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $("button").click(function(){
//  window.print();
 $("#printf").get(0).contentWindow.print();



  });
});



</script>
</head>
<body>



<iframe  width="1000" height="400" id="printf" name="printf" src="https://datastudio.google.com/embed/reporting/0B5FF6JBKbNJxQ1hMRzRiVDlobVU/page/jR7H"></iframe>


<button>Print </button>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

简而言之,这是不可能的。当涉及到网络标准时,您链接的答案已经很老了,而该解决方法已被Chrome和Firefox关闭。这是有充分理由的。如果您可以轻松地打印跨域iframe,则黑客可以将iframe嵌入具有https://totallynotrealfakebank.com/my-account/tax-info之类的URL,该URL显示您的社会保险号,使用诸如html2canvas之类的内容来捕获内容,并窃取您的信息

最简单的解决方法是让用户打开新标签中的嵌入内容:

<a href="https://datastudio.google.com/embed/reporting/0B5FF6JBKbNJxQ1hMRzRiVDlobVU/page/jR7H" target="_blank">Open Dashboard</a>

或者,如果您真的想要一个打印按钮,则可以使用第三方API,该API根据URL(例如https://apiflash.com)生成屏幕截图,或者使用类似于node-webshot。并让打印按钮提示下载生成的图像文件,或将生成的屏幕截图嵌入到同源 iframe中并使用iframe.contentWindow.print()


希望在某个时候Google Data Studio可以让用户将Javascript和/或自定义Apps脚本嵌入到仪表板中。如果他们愿意的话,那将是最好的解决方案,因为代码将在相同的来源运行。