Обращение к переменным страницы с расширения Google Chrome

Рейтинг: 0Ответов: 2Опубликовано: 09.04.2015

На странице пользователя Steam есть JavaScript код вида

<script type="text/javascript">
    g_rgProfileData = {"url":"http:\/\/steamcommunity.com\/id\/****\/","steamid":"****","personaname":"****","summary":"*****"};
</script>

Пишу дополнение к браузеру Google Chrome в котором нужно манипулировать с переменной g_rgProfileData.steamid, но не могу понять как ее изъять...

Попробовал включить свой js в тело страницы, достал нужную переменную, создал скрытый input, присвоил ему значение steamid, но при обработке расширение просто не видит созданный элемент (input)

Файл, который включается в тело страницы, выполняет следующий код:

var STEAMID = window.g_rgProfileData.steamid;
var ets2mp_div = document.createElement("div");
ets2mp_div.innerHTML = "<input type='hidden' name='steamid_jackrv' value='" + STEAMID + "' />";
placeHolder = document.getElementsByClassName("profile_header");
placeHolder[0].appendChild(ets2mp_div);

В основном скрипте при попытке достать переменную

STEAMID = document.getElementsByName("steamid_jackrv").value;

я получаю undefinded

Ответы

▲ 2Принят

getElementsByName, как следует из названия, возвращает массив. Разумеется, у массива не будет свойства value.

Возьмите нулевой элемент массива - и будет вам счастье.

▲ 5

Вообще, напрямую доступа к переменным нет, хотя и есть доступ к DOM. Как правило, решают эту проблему следующим образом:

  • Создаётся скрипт, который инжектируется в тело страницы;
  • Скрипт считывает необходимые данные и записывает их в DOM;
  • Расширение обращается к DOM'у и получает необходимые данные.

Выглядит это следующим образом:

в файле manifest.json:

"web_accessible_resources" : ["/js/contentScript.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);

Подробно данная методика описана здесь: