Возможно ли иметь пользовательские функции в google-chrome, которые будут всегда доступны в консоли (независимо от того, какая страница загружена)? Например, я хотел бы иметь функцию, называемую echo, которая будет всего лишь оберткой вокруг console.log. Это просто сохраняет немного ввода, но позже я мог бы захотеть создать некоторые полезные функции отладки.
Добавление пользовательских функций в консоль хром
Ответ 1
Ну, это довольно легко сделать. Вам нужно создать контент script. Этот script будет вводиться на любую страницу и создавать необходимые глобальные функции, которые вы будете использовать в своей консоли. Самая сложная часть заключается в том, как сделать эти функции пользовательского контента сложными, чтобы быть частью вашего фактического объекта window
, поскольку обычно вы не можете получить доступ к функциям или переменным, которые вы определяете в своем контенте script, из остальной части кода javascript, который не находится в содержимом script. Скрипты содержимого выполняются в так называемой изолированной среде.
Скрипты содержимого выполняются в специальной среде, называемой изолированным миром. Они имеют доступ к DOM страницы, на которую они вставляются, но не на любые переменные или функции JavaScript, созданные на этой странице. Он выглядит для каждого контента script, как если бы на странице, на которой он запущен, нет другого исполняемого кода JavaScript. То же самое верно в обратном: JavaScript, запущенный на странице, не может вызывать какие-либо функции или обращаться к любым переменным, определенным сценариями контента.
Но есть причудливое обходное решение.
Вы определяете файл манифеста следующим образом:
manifest.json
{
"name": "Content script",
"version": "0.1",
"manifest_version": 2,
"content_scripts": [{
"matches": ["http://*/*"],
"js": ["console.js"]
}]
}
И ваш контент script:
console.js
function customConsole() {
window.myNewFunction = function() {
console.log("Hello I'm available from console.");
};
}
var script = document.createElement('script'),
code = document.createTextNode('(' + customConsole + ')();');
script.appendChild(code);
(document.body || document.head || document.documentElement).appendChild(script);
Итак, вы указываете свои новые функции как глобальные функции, чтобы их можно было использовать в console
.
Также посмотрите на сообщение