Как переопределить функции из Web API при написании аддона Firefox? - PullRequest
0 голосов
/ 11 апреля 2020

В исследовательских целях я пытаюсь написать веб-расширение, которое переопределяет некоторую часть веб-API (например, setItem, getItem или removeItem из Storage интерфейс).

К сожалению, при попытке выполнить следующее:

index. js

Storage.prototype.setItem = function(a, b) { return 42; }

manifest. json

{
  "manifest_version": 2,
  "name": "cool-extension-name",
  "version": "1.0",
  "description": "A useful description.",
  "icons": {"48": "icons/potatoes.jpg"},
  "content_scripts": [{
    "run_at": "document_start",
    "matches": ["<all_urls>"],
    "js": ["index.js"]
  }]
}

Затем, используя web-ext run, и открыв веб-консоль Firefox после загрузки любой веб-страницы.

$ window.localStorage.setItem(1, 2)
undefined

Я бы надеялся, что она вернет 42. Что случилось?

1 Ответ

0 голосов
/ 13 апреля 2020

Вам необходимо запустить код через window.eval(), чтобы получить доступ к контексту самой веб-страницы. Например:

browser.tabs.executeScript(1, {
  code: 'window.eval("Storage.prototype.setItem = function(a, b) { return 42; }")'
})

См. Также: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#Using_eval_in_content_scripts

...