加载从跨文档消息传递中作为 event.data 获得的 pdf

2024-04-11

对于知道答案的人来说很简单。我的代码通过跨文档消息传递成功从网站下载 pdf。但是,我现在想在浏览器中显示 pdf,可能是在 iframe 或数据对象中。可能我需要知道 pdf 下载后存储的本地 URL。请帮忙,可能很简单。看这里的小提琴 http://jsfiddle.net/6zCgA/13/对于我的代码。

重要提示:因为我想下载文件,所以我不想简单地制作 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 内容为文字字符串 (in event.data)。您无法获取字符串数据的 URL(本地或非本地),除非您首先将其上传回某个地方(例如,通过 XHR 上传到您自己的服务器)。除此之外,我希望这个答案有所帮助。

下面的方法使用数据 URI 方案 http://en.wikipedia.org/wiki/Data_URI_scheme渲染由字符串表示的 PDF(例如event.data在你的情况下)。它与 Chrome 和 Firefox 配合得很好。不幸的是,对于 IE10,我收到 Adob​​e Acrobat Reader 插件(IE10/Win8 64 位,带最新更新和最新 Adob​​e Acrobat Reader)的“访问被拒绝”消息。因此,对于跨浏览器解决方案,您最好的选择可能是某种基于 HTML5 的 PDF 渲染器,例如PDF.js https://mozillalabs.com/en-US/pdfjs/.

Fiddle: http://jsfiddle.net/Noseratio/nmTJ9/1/ 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>

[EDITED] Using BLOB https://developer.mozilla.org/en-US/docs/Web/API/Blob and URL.createObjectURL(blob) https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL仅适用于 Chrome。显然,在撰写本文时,Acrobat Reader 插件不支持“blob:”样式 URL。

Fiddle: http://jsfiddle.net/Noseratio/uZwQw/1/ http://jsfiddle.net/Noseratio/uZwQw/1/

所以,跨浏览器的解决方案仍然需要一个真正的经典URL。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加载从跨文档消息传递中作为 event.data 获得的 pdf 的相关文章

随机推荐

  • Elasticsearch bool 过滤器用于数组同一元素上的多个条件

    我正在尝试创建一个仅在满足多个条件时才匹配文档的查询 过滤器在同一个项目上一个数组的 假设这是文档 arr f1 a f2 true f1 b f2 false 我希望能够检索在同一元素上有 N 个条件匹配的文档 例如 arr f1 a A
  • 解释这个 JsPerf.com 结果

    我在这个网站上进行了测试http jsperf com http jsperf com 我需要有人来解释一下 绿色和粉色代表什么 什么是每秒操作数 95 814 583 是什么 1 95 是多少 最快 和 较慢 是什么意思 嘿 我是 jsP
  • 使用“Hash#fetch”相对于“Hash#[]”的好处

    我不确定在什么情况下我想使用Hash fetch over Hash 是否存在一个可以很好用的常见场景 三个主要用途 当该值是强制性的 即没有默认值时 options fetch repeat times 你也会收到一条很好的错误消息 ke
  • 在OpenCV中,CV_8U和CV_8UC1有什么区别?

    在OpenCV中 CV 8U和CV 8UC1有区别吗 它们都是指具有一个通道的 8 位无符号类型吗 如果是的话 为什么有两个名字 如果不是 有什么区别 你可以看到从this https stackoverflow com questions
  • 从 JavaScript 访问 DIV 元素

    这是以下 DIV 结构 div class demo div div div div div div div 如何从 JavaScript 访问 tabs 2 var plot2 jqplot tabs 2 points 此 JavaScr
  • 在哪里可以找到英语短语列表? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的任务是搜索文本中陈词滥调和常见短语的用法 这些短语与您在财富之轮的短语谜题中可能看到的短语类似 这
  • 自定义 Visual Studio 起始页

    有没有办法自定义 VS 2008 起始页 我想显示一个网站 Sharepoint 站点 而不是新闻源 但我找不到解决方案 Update 关于卡什回答 https stackoverflow com questions 553392 cust
  • iOS8 中的应用内购买收据验证

    我们正在遵循 raywenderlinch 教程http www raywenderlich com 23266 in app purchases in ios 6 tutorial consumables and receipt vali
  • 更改 Rack Middleware 中的 response.body

    我正在尝试为 Rails 4 2 应用程序编写一些机架中间件 该中间件使用以下命令更改响应正文gsub方法 我发现使用这样的模式的旧示例 class MyMiddleware def initialize app app app end d
  • JavaScript:从其中获取完全限定的函数名称?

    看看下面的片段 有没有我可以写的函数来代替 生成可以在另一个函数中重用的路线 就像是var route this show fullyQualifiedName也许 var services github com api v2 json r
  • 从特定的起始位置获取选项?

    我有一个这样的选择
  • C++读取二进制文件

    我想了解如何在 C 中读取二进制文件 我的代码 int main ifstream ifd input png ios binary ios ate int size ifd tellg ifd seekg 0 ios beg vector
  • Jetty 8.1 用“Dispatched Failed”消息淹没日志文件

    我们使用 Jetty 8 1 作为嵌入式 HTTP 服务器 在过载情况下 服务器有时会开始用以下消息淹没日志文件 warn java util concurrent RejectedExecutionException warn Dispa
  • std::find 的优点

    使用 C 11 有什么优势吗std find超过一个容器的find method 如果是std vector 其中没有find方法 确实std find使用一些智能算法或简单地迭代每个元素的天真的方法 如果是std map看来你需要传递一个
  • 在python 3.5上安装pygame时出现权限错误

    当我安装时pygame 1 9 2a0 cp35 none win32 whl对于 python 3 5 我收到权限错误 PermissionError WinError 5 Access is denied 然后它说错误出现在 pygam
  • OleDbDataReader 如何读取数字类型?

    尝试从中读取数据 XLS 文件 我能够读取所有单元格字符串 但是无法读取数字在细胞中 我尝试使用 ToString 方法但没有成功 取回数据库null Code public xlsConverter string excelFilePat
  • Rust 的一步步交互式调试器?

    如何逐步调试 Rust 应用程序交互地就像我可以在 Ruby 中 撬开 一样 我希望能够在到达断点时实时查看并最好更改变量 是否有已完成生产的项目 我发现具有良好的可用性VS Code https code visualstudio com
  • 用于 LIFX 电源开/关的 PHP HTTP CURL PUT 请求

    我正在尝试使用 PHP 打开 关闭所有 Lifx 灯泡 API 文档 http developer lifx com http developer lifx com 表示使用 PUT 请求 curl u c87c73a896b554367f
  • 在特定命名空间中定义函数

    我创建了一个包 mypackage 附加了命名空间 mypackage 在这个包中有一个函数 我可以使用它来调用 myfunction or mypackage myfunction 现在我想用另一个版本 更新 替换 myfunction
  • 加载从跨文档消息传递中作为 event.data 获得的 pdf

    对于知道答案的人来说很简单 我的代码通过跨文档消息传递成功从网站下载 pdf 但是 我现在想在浏览器中显示 pdf 可能是在 iframe 或数据对象中 可能我需要知道 pdf 下载后存储的本地 URL 请帮忙 可能很简单 看这里的小提琴