Easy points for someone who knows the answer. My code successfully downloads a pdf from a website via cross document messaging. However, I want to now display the pdf in the browser, possibly in an iframe or data object. Possibly I would need to know the local url that the pdf is stored as once downloaded. Please help, probably easy points. See the fiddle here for my code.
IMPORTANT: Because I want to download the file I do not want to simply make client.src="http://ops.epo.org/3.0/rest-services/published-data/images/US/7123345/B2/thumbnail.pdf?Range=1"
HTML code:
<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 code:
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.");
}
}
I've tried your code, it returns PDF content as literal string (in
event.data
). You can't get a URL (local or non-local) for string data, unless you first upload it back to somewhere (e.g., to your own server via XHR). Apart from that, I hope this answer helps.The following approach uses Data URI scheme to render a PDF represented by a string (like
event.data
in your case). It works great with Chrome and Firefox. Unfortunately, with IE10 I'm getting "Access Denied" message by Adobe Acrobat Reader plugin (IE10/Win8 64bit w/latest updates and latest Adobe Acrobat Reader). So, for cross-browser solution your best bet would probably be a some kind of HTML5-based PDF renderer, like PDF.js.Fiddle: http://jsfiddle.net/Noseratio/nmTJ9/1/
HTML/JavaScript:
[EDITED] Using BLOB and URL.createObjectURL(blob) works only with Chrome. Apparently, Acrobat Reader plugin doesn't support "blob:"-style URL at the time of this writing.
Fiddle: http://jsfiddle.net/Noseratio/uZwQw/1/
So, a real classic URL is still required for a cross-browser solution.