I am attempted to scrape information off a website which apparently uses an ’embed’ to display a pdf window. The code is very simple and I’ve found a method for sending the information.
If I ‘ctrl + a’ the pdf window, it will select everything. At which point, I can now send the information as needed through a message.
My problem is, that I need a method to select and set the range on the information automatically. Preferably not manually.
The html is pretty easy:
<html> <head> </head> <body class="pdf"> <embed name="0111111" style="position:absolute; left: 0; top: 0;" width="100%" height="100%" src="about:blank" type="application/pdf" internalid="0111111"> </body> </html>
That really is all of it. The stuff is apparently inside the embed. As I said, I can ‘ctrl + a’ and highlight everything and get the info sent as needed, but I can’t seem to figure out how to automatically select the text inside the embed.
My current code is:
// Send Selected Info Inside PDF document.querySelector('embed').postMessage({type: 'getSelectedText'}, '*'); // Listen for info inside PDF window.addEventListener("message", (event) => { console.log(event.data.selectedText); }, false);
Any ideas?
Advertisement
Answer
document.querySelector(’embed’).postMessage({type: ‘selectAll’});
This works perfectly… You put it into the content script.
window.addEventListener("message", (event) => { console.log(event.data.selectedText); }, false); const script = document.createElement('script'); script.textContent = `(${() => { document.querySelector('embed').postMessage({type: 'selectAll'}); document.querySelector('embed').postMessage({type: 'getSelectedText'}, '*'); }})()`; document.documentElement.appendChild(script); script.remove();