Я работал над расширением для Chrome.
Чтобы работать, он должен передать глобальную переменную окна, установленную веб-сайтом, в основной скрипт расширения с помощью CustomEvent.
Обычно этоотлично работает, когда страница загружается в активную вкладку, но всякий раз, когда она загружается как не сфокусированная вкладка, или когда выполнение сценария расширения задерживается иным образом, объект события, полученный слушателем, имеет атрибут детализации null
.
Для ясности, весь объект детализации события null
, а не только необходимая переменная.Я сделал обходной путь для этого, прикрепив необходимую переменную к документу в виде строки JSON, но я хотел бы понять, что не так с событием.
Ниже приведены соответствующие части кода.
manifest.json:
"content_scripts": [ {
"js": [ "main.js", "jquery-3.3.1.js"],
"matches": [ "*://*.site.com/*"],
"run_at": "document_end"
} ],
"permissions": [ "declarativeContent", "activeTab", "storage", "*://*.site.com/*" ],
"web_accessible_resources": [ "injectedScript.js" ]
main.js:
$(function() {
document.addEventListener('globalPasser', function(response) {
if(response.detail){
// store variables
}
}, true);
var passGlobals = document.createElement('script');
passGlobals.src = chrome.extension.getURL('injectedScript.js');
(document.head||document.documentElement).appendChild(passGlobals);
passGlobals.onload = function() {
passGlobals.remove();
};
}
injectedScript.js:
var newEvent = new CustomEvent('globalPasser', {detail:{variable: neededGlobalVariable}});
document.dispatchEvent(newEvent);