Розширення Chrome: нехай воно запускається при кожному завантаженні сторінки


91

Я хочу зробити розширення chrome, яке виконує деякі сценарії після завантаження однієї сторінки, я не впевнений, чи потрібно мені реалізовувати цю логіку на фоновій сторінці, чи це може бути де-небудь ще, будь-яка допомога тут буде дуже вдячна.


про всяк випадок він повинен запустити сценарій після того, як будь-яка сторінка буде завантажена в браузер.
Альбертош

@ZloySmiertniy так, просто шукайте сценарії вмісту, також переконайтеся, що в опції run_at ви вводите document_end, а також у збіги: вам потрібно вказати, в яку URL-адресу будуть введені ваші скрипти.
Альбертош

Відповіді:


92

За допомогою фонового сценарію ви можете прослухати chrome.tabs.onUpdatedподію та перевірити властивість changeInfo.statusзворотного дзвінка. Він може бути завантажувальним або повним . Якщо він завершений , виконайте дію.

Приклад:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete') {

    // do your things

  }
})

Оскільки це, ймовірно, спрацьовує при кожному завершенні вкладки, ви також можете перевірити, чи є вкладка activeсвоїм омонімічним атрибутом , наприклад:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete' && tab.active) {

    // do your things

  }
})

8
Uncaught TypeError: Cannot read property 'onUpdated' of undefined
Зелений

2
Що? Ця відповідь від 2 з половиною років тому. Зараз все, мабуть, змінилося.
fiatjaf

1
Для створення конкретної URL-сторінки:if (tab.url.startsWith("https://example.com") == false) return;
Nabi KAZ

47

Якщо йому потрібно запустити onloadподію сторінки, це означає, що документ та всі його активи завантажені, це повинно бути у скрипті вмісту, вбудованому в кожну сторінку, для якої ви хочете відстежувати onload.


14
Було б краще дозволити вводити скрипт вмісту на "document_end", див. "Run_at" у маніфесті content_script:run_at: "document_end"
Мохамед Мансур


10

Цей код повинен це зробити:

manifest.json

   {
      "name": "Alert 'hello world!' on page opening",
      "version": "1.0",
      "manifest_version": 2,
      "content_scripts": [
        {
          "matches": [
            "<all_urls>"
          ],
          "js": ["content.js"]
        }
      ]
    }

content.js

alert('Hello world!')

чи можна використовувати регулярний вираз у полі "збіги"?
Бутуз,

Так, див.https://developer.chrome.com/extensions/content_scripts#matchAndGlob
Дін Міхан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.