Переопределенная функция сброса расширения Chrome - PullRequest
0 голосов
/ 17 января 2019

Проблема:

Расширению Chrome, над которым я работаю, нужен спуфер местоположения. Это работает, однако я не могу «сбросить» его.

Что у меня так далеко:

Давайте рассмотрим соответствующий код. Это часть скрипта контента.

let cachedGeoLocFunc = navigator.geolocation.getCurrentPosition

let geoSpoofCode = conf => `
  (function() {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition = function(success) { return success(${conf}); }
    } else {
    console.error('Geolocation is not supported in this browser');
    }
  })()
`

browser.runtime
  .sendMessage({ type: 'request-spoofed-coords' })
  .then(curCoords => {
    //json from state, contains current spoofed locale
    if (curCoords) {
      let script = document.createElement('script')
      script.textContent = geoSpoofCode(curCoords)

      document.documentElement.appendChild(script)
      script.remove()
    } else {
      //revert to default behavior
      let unSetScript = document.createElement('script')
      unSetScript.textContent = `
      (function() {
        navigator.geolocation.getCurrentPosition = ${cachedGeoLocFunc};
      })()`
      document.documentElement.appendChild(unSetScript)
      unSetScript.remove()
    }
  })

Как видите, я переопределяю встроенную функцию Chrome и предоставляю свою собственную ценность. Это прекрасно работает для подмены местоположения.

Неожиданное поведение:

Концептуально я предполагал, что это сработает. Я кеширую встроенную функцию Chrome, чтобы позже я мог ее сбросить (см. Остальное). На практике я получаю эту ошибку, когда этот скрипт контента внедряется в страницу.

Uncaught SyntaxError: Unexpected identifier

И он ломается здесь (согласно инспектору хрома)

Снимок экрана с ошибкой

Мои вопросы!

Итак, он просто вставляет [собственный код] вместо реальной функции (по крайней мере, так это выглядит).

Кто-нибудь знает, как я могу отменить эту функцию. Есть ли элегантный способ сделать это?

Как работает кэширование в Chrome, есть ли способ просмотреть этот собственный код

В любом случае, помощь будет принята с благодарностью. Надеюсь, у всех вас есть отличный день!

1 Ответ

0 голосов
/ 18 января 2019

Хорошо, это было недоразумение, как указывал @wOxxOm. Пожалуйста, обратитесь к их ответу. Сценарии содержимого не влияют и не переопределяют функции API.

...