Marcuzy
@Marcuzy
php разработчик

Чтение «своих» свойств у dom элемента из content_script Chrome's Extentsion

Здравствуйте. Разрабатываю расширение для Google Chrome. Понадобилось разбирать страницы одного сайта, конкретно есть элемент с определенным id, я так понял, что какой-то скрипт этого сайта устанавливает этому элементу нестандартное свойство t_content. Я могу получить доступ к этому свойству через консоль хрома:
document.getElementById('item_id').t_content;
Код выдает в консоль строку - то, что нужно. Мне это же самое необходимо проделать в content_script, но только typeof этого свойства там оказывается "undefined". Не пойму в чем дело. Пробовал в manifest.json играть с run_at, но это ничего не дало, тем более дефолтное значение как раз подходит. Элемент во время запроса уже существует, но свойства нет. Свойство это устанавливается скриптом, учитывая возможную задержку, использовал setTimeout, но множество итераций таймера с задержкой 500мс ничего не изменило - всё тот же "undefined".
Пробовал этому же элементу в консоли устанавливать другие "свои" свойства: результат тот же.

В чем может быть проблема, может баг, или я что-то не учел.

Заранее благодарю.
  • Вопрос задан
  • 2792 просмотра
Решения вопроса 2
Marcuzy
@Marcuzy Автор вопроса
php разработчик
Метод со встраиванием скрипта работает на ура.
function _script_(){
	function _tc_(sel){ 
		return typeof sel != "undefined" && sel !=null ? sel.t_content : "no";
	}

	window.postMessage({ 
		type: "FROM_PAGE",
		type_of_wp: _tc_(document.querySelector(".team-0 .withTip.firearms")),
		rank : _tc_(document.querySelector(".team-0 .withTip.sp.g1eb8.ic12453f2.d3710")),
		clothes: _tc_(document.querySelector(".team-0 .withTip.armor-plating")),
		house:_tc_(document.querySelector(".register.statistics img.withTip"))
	}, "*");
}
var n = document.createElement('script');
n.innerHTML = _script_.toString() + " _script_();";

document.body.appendChild(n);
Ответ написан
Комментировать
Marcuzy
@Marcuzy Автор вопроса
php разработчик
В общем-то, после внимательного изучения доков выяснилось, что content_script изрядно изолирован от страницы сайта, и среды выполнения (Execution environment) javascript полностью изолированы, а нестандартное свойство - ничто иное как свойство js объекта, а не чистого dom. https://developer.chrome.com/extensions/content_sc... здесь предлагается использовать postMessage, но это сработает только в том случае, если и страница сайта и content_script "хотят" это делать, т.е. на сайте должен быть учтен механизм приема сообщений. Можно попробовать создать объект script через createElement/appendChild из content_script, который будет поддерживать этот механизм и отдавать нужные данные.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы