javascript - 如何在 Javascript 中获取选定的 pdf 文本?

标签 javascript google-chrome-extension

我正在编写一个 Chrome 扩展来处理 pdf 文件,所以我想在 pdf 中获取选定的文本。我该怎么做。

类似的东西:

enter image description here

最佳答案

您可以使用内部 undocumented commands内置 PDF 查看器。

这是一个内容脚本的例子:

function getPdfSelectedText() {
  return new Promise(resolve => {
    window.addEventListener('message', function onMessage(e) {
      if (e.origin === 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai' &&
          e.data && e.data.type === 'getSelectedTextReply') {
        window.removeEventListener('message', onMessage);
        resolve(e.data.selectedText);
      }
    });
    // runs code in page context to access postMessage of the embedded plugin
    const script = document.createElement('script');
    if (chrome.runtime.getManifest().manifest_version > 2) {
      script.src = chrome.runtime.getURL('query-pdf.js');
    } else {
      script.textContent = `(${() => {
        document.querySelector('embed').postMessage({type: 'getSelectedText'}, '*');
      }})()`;
    }
    document.documentElement.appendChild(script);
    script.remove();
  });
}

chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
  if (msg === 'getPdfSelection') {
    getPdfSelectedText().then(sendResponse);
    return true;
  }
});

此示例假设您从弹出窗口或后台脚本发送消息:

chrome.tabs.query({active: true, currentWindow: true}, ([tab]) => {
  chrome.tabs.sendMessage(tab.id, 'getPdfSelection', sel => {
    // do something
  });
});

另见 How to open the correct devtools console to see output from an extension script?

ManifestV3 扩展也需要这个:

  • manifest.json 应该公开 query-pdf.js

      "web_accessible_resources": [{
        "resources": ["query-pdf.js"],
        "matches": ["<all_urls>"],
        "use_dynamic_url": true
      }]
    
  • query-pdf.js

    document.querySelector('embed').postMessage({type: 'getSelectedText'}, '*')
    

关于javascript - 如何在 Javascript 中获取选定的 pdf 文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61076303/

相关文章:

javascript - 如何区分 javascript 中的加号/等于号和等于号?

javascript - 如何在发生适当的 DOM url 更改时运行 content.js 脚本?

google-chrome-extension - Google Universal Analytics - 开发和调试工具

google-chrome-extension - Chrome 扩展程序 - 控制台日志未触发

javascript - 如何使用 JSON 在谷歌地图中制作动态标记?

javascript - 表单提交后防止页面重新加载。 e.preventDefault() 和隐藏的 iFrame 不工作

javascript - 如何减慢滑动速度?

javascript - 如何在 PassportJS 中获取 facebook 用户图像?

JavaScript 文本选择事件

javascript - 未捕获的类型错误 : Cannot read property 'get' of undefined when detecting chrome extension