Расширение Chrome content_script как в document_start, так и в document_end - PullRequest
2 голосов
/ 20 марта 2019

Доброго времени суток всем, как вы можете видеть, я довольно новичок в расширениях Chrome.

Можете ли вы запустить скрипт из content_scripts до и после полной загрузки DOM или страницы?

Как:

"content_scripts": [ {
    "matches": ["<all_url>"],
    "js": ["content.js"],
    "all_frames": true,
    "run_at": "document_start",
    "run_at": "document_end"
} ]

Или что-то вроде:

 "content_scripts": [ {
    "matches": ["<all_url>"],
    "js": ["content1.js"],
    "all_frames": true,
    "run_at": "document_start"
} ],
"content_scripts": [ {
    "matches": ["<all_url>"],
    "js": ["content2.js"],
    "all_frames": true,
    "run_at": "document_end"
} ]

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Вы идете в правильном направлении: вы можете использовать свойство run_at , но ваш манифест должен выглядеть примерно так:

"content_scripts": [
{
    "matches": ["<all_url>"],
    "js": ["content1.js"],
    "all_frames": true,
    "run_at": "document_start"
},
{
    "matches": ["<all_url>"],
    "js": ["content2.js"],
    "all_frames": true,
    "run_at": "document_end"
}]

Это должен быть массив объектовопределяя все сценарии содержимого вместо объявления свойства content_script дважды.

Если вы используете jQuery, вы также можете использовать $(document).ready() следующим образом:

const func1 = params => {
    // Stuff that will happen as soon as it can
};

$(document).ready(() => {
    // stuff that will happen when DOM is ready
});

Если вы не используете jQuery, вы можете просто выполнить быстрый поиск в Google, чтобы найти альтернативы для $(document).ready в vanilla js.

Другое решение: вы можете использовать его для программного внедрения скрипта контента из фонового скрипта, используя chrome.tabs.executeScript() docs .

1 голос
/ 20 марта 2019

Вы можете иметь только одну запись content_scripts, поэтому она будет выглядеть следующим образом:

"content_scripts": [{
    "matches": ["<all_url>"],
    "js": ["content1.js"],
    "all_frames": true,
    "run_at": "document_start"
  },{
    "matches": ["<all_url>"],
    "js": ["content2.js"],
    "all_frames": true,
    "run_at": "document_end"
}]

С этим параметром content1.js будет выполняться в начале, а content2.js в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...