Переменная окна доступа из Content Script

У меня есть расширение Chrome, которое пытается найти на каждом просматриваемом URL (и каждом iframe каждого URL-адреса браузера), если существует переменная window.my_variable_name.

Поэтому я написал этот небольшой фрагмент контента:

function detectVariable(){
    if(window.my_variable_name || typeof my_variable_name !== "undefined") return true;
    return false;
}

Попытка слишком долго, кажется, что скрипты контента запускаются в некоторых песочницах.

Есть ли способ получить доступ к элементу window из сценария содержимого Chrome?

Ответ 1

Важно знать, что Content Scripts совместно используют ту же DOM, что и текущая страница, но не имеют доступа к переменным. Лучший способ справиться с этим случаем - с помощью скрипта содержимого вставить тег сценария в текущий DOM, который будет читать переменные на странице.

в manifest.json:

"web_accessible_resources" : ["/js/my_file.js"],

в contentScript.js:

function injectScript(file, node) {
    var th = document.getElementsByTagName(node)[0];
    var s = document.createElement('script');
    s.setAttribute('type', 'text/javascript');
    s.setAttribute('src', file);
    th.appendChild(s);
}
injectScript( chrome.extension.getURL('/js/my_file.js'), 'body');

в my_file.js:

// Read your variable from here and do stuff with it
console.log(window.my_variable);