top not navigate data allowed google-chrome frame jspdf

google-chrome - not allowed to navigate top frame to data url jspdf



JsPDF: no se permite navegar por el cuadro superior a la URL de datos (11)

Después de actualizar Google Chrome, el informe jsPDF en una nueva ventana ya no funciona.

La consola muestra el mensaje:

No se permite navegar por el marco superior a la URL de datos: datos: aplicación / pdf; base64, JVBERi0xLjMKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL1 ....

¿Me puedes ayudar?

Gracias.


@ kuldeep-choudhary

Hola, de hecho, para resolver estoy usando una etiqueta de objeto con angularJS 1.5.xx

<object ng-attr-data="{{data}}" type="application/pdf"></object>

y en script:

$scope.doc.data = $sce.trustAsResourceUrl(doc.output("datauristring"));

En javascript puro, tal vez así funcione:

html:

<object id="obj" type="application/pdf" ></object>

js:

document.elementById(''obj'').data = doc.output("datauristring");

por favor, intenta corregirme si me equivoco.



Basado en la share , pero sin volver a analizar y, por lo tanto, sin necesidad adicional de escapar de algo:

x=window.open(); iframe=x.document.createElement(''iframe'') iframe.width=''100%'' iframe.height=''100%'' iframe.frameBorder=0 iframe.style="border: 0" iframe.src=''data:text/html........'' //data-uri content here x.document.body.appendChild(iframe);


El uso de download = "" me permitió descargar el archivo


En angular2 + -

app.component.html -

<object id="obj" [attr.data] type="application/pdf"> </object>

app.component.ts

document.getElementById(''obj'').dataset.data = doc.output("datauristring"); var blob = doc.output("blob"); window.open(URL.createObjectURL(blob));


Esto funciona bien ahora que Chrome ha eliminado la navegación del marco superior. Solo descargar el pdf en Chrome da un problema. Descargar funciona bien en Firefox aunque.

var string = doc.output(''datauristring''); var iframe = "<iframe width=''100%'' height=''100%'' src=''" + string + "''></iframe>" var x = window.open(); x.document.open(); x.document.write(iframe); x.document.close();


No está relacionado con jspdf, pero sí me ayudó aquí (y esta pregunta es la mejor opción en google): si especifica un atributo download="..." para la etiqueta de anclaje, se abrirá correctamente el mensaje de descarga.


Quizás pueda ayudar, crear una función para exportar con el atributo de descarga html5:

var docPdf = doc.output(); exportToFile(docPdf,defaults.type); function exportToFile(data,type){ var hiddenElement = document.createElement(''a''); hiddenElement.href = ''data:text/''+type+'';filename=''+''exportar.''+type+'';''+''charset=utf-8,'' + encodeURI(data); hiddenElement.target = ''_blank''; hiddenElement.download = ''exportar.''+type; hiddenElement.click(); }


Recientemente tuve el mismo problema al usar el objeto FileReader para leer contenido y mostrar mi JSReport.

var reader = new FileReader(); reader.onload = function (e) { window.open(reader.result, "_blank"); } reader.readAsDataURL(blob);

Desafortunadamente, después de la actualización de Chrome, todo mi informe dejó de funcionar. Intenté solucionar esto usando el objeto Blob y todavía funciona, pero si tienes un bloqueador de ventanas emergentes, no funcionará.

var file = new Blob([blob], { type: ''application/pdf'' }); var fileURL = URL.createObjectURL(file); window.open(fileURL);

Finalmente encuentro una manera de evitar este problema creando el iFrame dinámicamente después de leer este tema y decidí compartir la solución .

var file = new Blob([blob], { type: ''application/pdf'' }); var fileURL = URL.createObjectURL(file); var win = window.open(); win.document.write(''<iframe src="'' + fileURL + ''" frameborder="0" style="border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;" allowfullscreen></iframe>'')


<iframe id="ManualFrame" frameborder="0" style="border:0" allowfullscreen> </iframe> <script> $(function () { setManualFrame(); }); function setManualFrame() { $("#ManualFrame").attr("height", screen.height); $("#ManualFrame").attr("width", screen.width); $("#ManualFrame").attr("src", "data:application/pdf;base64," + Your_PDF_Data); } </script>


var pdfUrl = doc.output(''datauri'').substring(doc.output(''datauri'').indexOf('','')+1); var binary = atob(pdfUrl.replace(//s/g, '''')); var len = binary.length; var buffer = new ArrayBuffer(len); var view = new Uint8Array(buffer); for (var i = 0; i < len; i++) { view[i] = binary.charCodeAt(i); } var blob = new Blob( [view], { type: "application/pdf" }); var url = URL.createObjectURL(blob); function openPDF(){ window.open(url); }