расширение chrome: получение исходного HTML-кода текущей страницы при загрузке страницы - PullRequest
1 голос
/ 10 июня 2019

Я нашел этот ответ о том, как получить исходный текст страницы текущей вкладки: Получение исходного HTML-кода текущей страницы из расширения Chrome

Однако для этого ответа пользователю необходимо нажатьрасширение всплывающего окна.

Я хотел бы знать, как получить доступ к источнику страницы при загрузке страницы (без необходимости вызывать всплывающее окно).

В моем background.js Я устал от этого:

chrome.tabs.onUpdated.addListener(function (tabId , info) {
  console.log(info)

  chrome.tabs.executeScript(null, {
    file: "getPagesSource.js"
  }, function() {
    if (chrome.runtime.lastError) {
      message.innerText = 'There was an error injecting script : \n' + chrome.runtime.lastError.message;
    }
  });
});

, но это приводит к следующей ошибке:

Произошла ошибка при вводе сценария: Не удается получить доступ к содержимому страницы.Манифест расширения должен запрашивать разрешение на доступ к соответствующему хосту.

Мой manifest.js:

{
    "name": "Getting Started Example",
    "version": "1.0",
    "description": "Build an Extension!",
    "permissions": ["declarativeContent",
                    "https://www.example.com/*",
                    "storage",
                    "activeTab"],
    "background": {
        "scripts": ["background.js"],
        "persistent": false
      },
    "content_scripts": [
      {
        "matches": [
          "<all_urls>"
        ],
        "js": ["content.js"]
      }
    ],
    "options_page": "options.html",
    "manifest_version": 2,
    "page_action": {
        "default_popup": "popup.html",
        "default_icon": {
            "16": "images/get_started16.png",
            "32": "images/get_started32.png",
            "48": "images/get_started48.png",
            "128": "images/get_started128.png"
          }
    },
    "icons": {
        "16": "images/get_started16.png",
        "32": "images/get_started32.png",
        "48": "images/get_started48.png",
        "128": "images/get_started128.png"
      }
  }

Не думаю, что проблема действительно связана с разрешениями, потому что я могуполучить исходный код страницы из popup.html (который является скриптом page_action).Но я не могу получить его через "background" или "content_scripts".Почему это так и как правильно этого достичь?

1 Ответ

1 голос
/ 10 июня 2019

Речь идет о разрешениях.
Ваш пример немного недостаточен, но, как я вижу, вы используете разрешение "activeTab".

Согласно документам activeTab расширение получит доступ (например, к источникам) к текущей вкладке после выполнения любого из следующих действий:

  • Выполнение действия браузера
  • Выполнение действия страницы
  • Выполнение пункта контекстного меню
  • Выполнение сочетания клавиш из команд API
  • Принятие предложения от API омнибокса

Вот почему вы можете получить источники после открытия всплывающего окна.

Чтобы получить доступ к вкладкам без этих действий, вам необходимо запросить следующие разрешения:

  • tabs
  • <all_urls>

Следует отметить, что он позволяет запускать контент-скрипт на каждой вкладке, а не только на активной.

Вот самый простой пример:

manifest.json

{
  "name": "Getting Started Example",
  "version": "1.0",
  "description": "Build an Extension!",
  "permissions": ["tabs", "<all_urls>"],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "manifest_version": 2
}

background.js

chrome.tabs.onUpdated.addListener(function (tabId, info) {
    if(info.status === 'complete') {
        chrome.tabs.executeScript({
            code: "document.documentElement.innerHTML" // or 'file: "getPagesSource.js"'
        }, function(result) {
            if (chrome.runtime.lastError) {
                console.error(chrome.runtime.lastError.message);
            } else {
                console.log(result)
            }
        });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...