javascript – 从交叉文档消息传递中加载从event.data获取的pdf
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 从交叉文档消息传递中加载从event.data获取的pdf,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3805字,纯文字阅读大概需要6分钟。
内容图文
![javascript – 从交叉文档消息传递中加载从event.data获取的pdf](/upload/InfoBanner/zyjiaocheng/817/8362c6e4aaa444abac3bdbaee5f1aa73.jpg)
对于知道答案的人来说,简单点.我的代码通过跨文档消息传递成功地从网站下载pdf.但是,我现在想在浏览器中显示pdf,可能在iframe或数据对象中.可能我需要知道pdf存储为已下载的本地URL.请帮忙,可能很容易点.请参阅the fiddle here以获取我的代码.
重要提示:因为我想下载文件,我不想简单地制作client.src =“http://ops.epo.org/3.0/rest-services/published-data/images/US/7123345/B2/thumbnail .PDF?范围= 1\”
HTML代码:
<input type="button" onclick="runit()" value="runit"></input>
<iframe width=100 height=100 id="client" src="http://ops.epo.org/3.0/xss/crosssitescript.html" />
Javascript代码:
function runit() {
// Get the iframe window object
var client = document.getElementById('client');
// Create the data string to be passed to the OPS JavaScript
var data = "{'url' : 'http://ops.epo.org/3.0/rest-services/published-data/images/US/7123345/B2/thumbnail.pdf?Range=1', " + "'method' : 'GET', " + "'requestHeaders' : {'Accept': 'application/pdf' } " + "}";
// Use the postMessage() method in order to send the data to the
// iframe object
client.contentWindow.postMessage(data, 'http://ops.epo.org');
}
// Add event listener for your window
window.addEventListener("message", receiveMessage, false);
// Method handling window events
function receiveMessage(event) {
// Check origin of the event!
if (event.origin == "http://ops.epo.org") {
alert("How do I display the event.data as a pdf on the page?");
} else {
alert("Got message from unknown source.");
}
}
解决方法:
我已经尝试过你的代码,它将PDF内容作为文字字符串返回(在event.data中).您不能获取字符串数据的URL(本地或非本地),除非您首先将其上传回某个地方(例如,通过XHR将其上传到您自己的服务器).除此之外,我希望这个答案有所帮助.
以下方法使用Data URI scheme来呈现由字符串表示的PDF(例如,在您的情况下为event.data).它适用于Chrome和Firefox.不幸的是,使用IE10我会通过Adobe Acrobat Reader插件(IE10 / Win8 64bit w /最新更新和最新的Adobe Acrobat Reader)获得“拒绝访问”消息.因此,对于跨浏览器解决方案,您最好的选择可能是某种基于HTML5的PDF渲染器,如PDF.js.
小提琴:http://jsfiddle.net/Noseratio/nmTJ9/1/
HTML / JavaScript的:
<!DOCTYPE html>
<head>
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script type="text/javascript">
window.runit = function() {
// var pdfText = event.data;
var pdfText = pdfSource.text;
var pdfTextEncoded = btoa(unescape(encodeURIComponent(pdfText)));
textContainer.innerText = pdfText;
pdfContainer.innerHTML =
'<object id="pdf"' +
'width="400" height="240" type="application/pdf"' +
'data="data:application/pdf;base64,' + pdfTextEncoded + '">' +
'<span>PDF plugin is not available.</span>' +
'</object>';
}
</script>
</head>
<body>
<input type="button" onclick="runit()" value="runit">
<!-- http://en.wikipedia.org/wiki/Data_URI_scheme -->
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
<br>
<textarea id="textContainer" style="width: 400px; height: 240px"></textarea>
<br>
<div id="pdfContainer"></div>
<script id="pdfSource" type="text/plain">
%PDF-1.7
1 0 obj % entry point
<<
/Type /Catalog
/Pages 2 0 R
>>
endobj
2 0 obj
<<
/Type /Pages
/MediaBox [ 0 0 200 200 ]
/Count 1
/Kids [ 3 0 R ]
>>
endobj
3 0 obj
<<
/Type /Page
/Parent 2 0 R
/Resources <<
/Font <<
/F1 4 0 R
>>
>>
/Contents 5 0 R
>>
endobj
4 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /Times-Roman
>>
endobj
5 0 obj % page content
<<
/Length 44
>>
stream
BT
70 50 TD
/F1 12 Tf
(Hello, world!) Tj
ET
endstream
endobj
xref
0 6
0000000000 65535 f
0000000010 00000 n
0000000079 00000 n
0000000173 00000 n
0000000301 00000 n
0000000380 00000 n
trailer
<<
/Size 6
/Root 1 0 R
>>
startxref
492
%%EOF
</script>
</body>
[已编辑]使用BLOB和URL.createObjectURL(blob)仅适用于Chrome.显然,Acrobat Reader插件在撰写本文时不支持“blob:” – 样式的URL.
小提琴:http://jsfiddle.net/Noseratio/uZwQw/1/
因此,跨浏览器解决方案仍然需要真正的经典URL.
内容总结
以上是互联网集市为您收集整理的javascript – 从交叉文档消息传递中加载从event.data获取的pdf全部内容,希望文章能够帮你解决javascript – 从交叉文档消息传递中加载从event.data获取的pdf所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。