Skip to content

How to integrate the API of SingleFile into an extension

Gildas edited this page Sep 8, 2019 · 55 revisions
  1. Copy from SingleFile the lib folder, the extension/index.js file and the extension/lib folder.
  2. Create a manifest.json file containing the content below.
{
  "name": "<Extension name>",
  "author": "<Author>",
  "version": "0.0.1",
  "description": "<Description>",
  "content_scripts": [
    {
      "matches": [
        "<all_urls>"
      ],
      "run_at": "document_start",
      "js": [
        "lib/index.js",
        "extension/index.js",
        "extension/lib/browser-polyfill/chrome-browser-polyfill.js",
        "lib/single-file/single-file-helper.js",
        "lib/hooks/content/content-hooks-frames.js",
        "lib/frame-tree/content/content-frame-tree.js"
      ],
      "all_frames": true,
      "match_about_blank": true
    },
    {
      "matches": [
        "<all_urls>"
      ],
      "run_at": "document_start",
      "js": [
        "lib/index.js",
        "lib/hooks/content/content-hooks.js"
      ]
    }
  ],
  "background": {
    "scripts": [
      "lib/index.js",
      "extension/index.js",
      "extension/lib/browser-polyfill/chrome-browser-polyfill.js",
      "extension/lib/core/bg/scripts.js",
      "extension/lib/fetch/bg/fetch.js",
      "extension/lib/frame-tree/bg/frame-tree.js",
      "extension/lib/lazy/bg/lazy-timeout.js"
    ],
    "persistent": false
  },
  "web_accessible_resources": [
    "lib/hooks/content/content-hooks-web.js",
    "lib/hooks/content/content-hooks-frames-web.js"
  ],
  "permissions": [
    "activeTab",
    "<all_urls>"
  ],
  "incognito": "spanning",
  "manifest_version": 2
}
  1. Inject SingleFile in the tab to save by executing the code below in the background script.
await singlefile.extension.injectScript(tabId, options);
  • Arguments
    • tabId is a Tab id
    • options is an object containing the options to pass to SingleFile. The default values can be found in the extension/core/bg/config.js file.
  • Return
    • A promise which is resolved once SingleFile is injected
  1. Capture the page by executing the code below in the content script of the tab where Singlefile has been injected.
const pageData = await singlefile.extension.getPageData(options);
  • Arguments
    • tabId is a Tab id
    • options is an object containing the options to pass to SingleFile.
  • Return
    • A promise which is resolved to an object having a property content which contains the content of the page.
Clone this wiki locally