Я работаю над расширением chrome, в котором я заменяю функцию navigator.credentials.create
веб-API chrome на собственный обработчик. navigator.credentials.create
вызывается, когда пользователь инициирует регистрацию 2FA для ключа безопасности.
Пользовательский обработчик работает на facebook.com, но не работает на mail.google.com.
Я приложил минимальный код расширения, над которым я работаю. Этот сценарий внедряется на каждую страницу и может быть подтвержден с помощью «внедренного сценария» консоли. В моем примере приложения я распечатал консольную инструкцию «In extension's create» в пользовательском обработчике navigator.credentials.create
. Его следует распечатывать всякий раз, когда пользователь инициирует процесс регистрации 2FA. Он работает для facebook, но не работает на https://myaccount.google.com/. Я убедился, что скрипт вставлен во все фреймы, доступные на сайте. Я также подтвердил, что mail.google.com не использует сервис-воркеров для вызова navigator.credentials.create
API.
content_script. js
const webauthnInject = document.createElement('script');
webauthnInject.type = 'text/javascript';
webauthnInject.src = 'chrome-extension://' + chrome.runtime.id + '/inject_webauthn.js';
document.documentElement.appendChild(webauthnInject);
inject_webauthn. js
(() => {
console.log("injected script");
const real_create = navigator.credentials.create;
navigator.credentials.create = async function() {
console.log("In extension's create");
let res = await real_create.bind(navigator.credentials)(arguments[0]);
return res;
};
})();
манифест. json
{
"manifest_version": 2,
"name": "sample app",
"description": "A Sample app",
"version": "1.0.2",
"minimum_chrome_version": "36.0.1985.18",
"content_scripts": [
{
"all_frames": true,
"match_about_blank": true,
"matches": [
"https://*/*",
"http://*/*"
],
"exclude_matches": [
"https://*/*.xml"
],
"run_at": "document_start",
"js": [
"content_script.js"
]
}
],
"background": {
"persistent": false,
"scripts": [
"background.js"
]
},
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
"permissions": [
"tabs",
"storage",
"https://*/*",
"http://*/*"
],
"web_accessible_resources": [
"inject_webauthn.js"
]
}