CssRules/rules имеют значение null в Chrome
Моему расширению chrome необходимо изменить некоторые правила CSS на странице пользователя. Доступ к стилям через document.styleSheets
дает только доступ к стилям, связанным из одного домена. Другие элементы массива document.styleSheets
имеют cssRules/rules
значение null.
Почему здесь применяется политика перекрестных доменов? Стили применяются в любом случае независимо от их происхождения, так в чем же смысл? И как обойти это в моем случае?
EDIT:
Причина, по которой мне нужно ИЗМЕНИТЬ правила пользователя css (в отличие от простого добавления моего собственного), заключается в том, что мне нужно защитить настраиваемый элемент, добавленный расширением, из-за влияния правил *
. см. подробности в этом вопросе
Ответы
Ответ 1
Скрипты содержимого не имеют междоменных привилегий по сравнению с обычным javascript, поэтому любые ограничения переносятся. См. Соответствующий вопрос вопрос № 1, вопрос №2.
Вы можете ввести свой собственный CSS-стиль в манифест:
"content_scripts": [
{
"matches": ["http://www.google.com/*"],
"css": ["mystyles.css"]
}
]
где вы можете попробовать перезаписать исходные стили, указав правила с более высоким specificity.
Вы также можете просто настроить стили конкретных стилей через javascript:
document.getElementById("id").style.property="value";
Ответ 2
Я исправил свою версию проблемы, изменив URL-адрес с http://на https://. Doh!