В расширениях (я практично сосредоточен на расширениях Chrome) идентификаторы и классы CSS, введенные на страницу, могут вступать в конфликт с другими элементами на странице.

Я пытаюсь определить их имя с помощью префикса расширения, но не совсем уверен. Итак, есть ли способ точно определить имена идентификаторов / классов css?

2
Gaël Barbin 18 Мар 2013 в 21:34

1 ответ

Лучший ответ

Это невозможно, если ваше требование «абсолютно уверен». Кто-то всегда может загрузить ваше расширение, посмотреть на имена классов, которые вы используете, а затем изменить CSS своего веб-сайта, чтобы он конфликтовал с вашими именами классов (или, что более вероятно, попытался переопределить). Это особенность, а не ошибка; расширения расширяют веб-страницы, поэтому предполагается, что они могут смешиваться со своими DOM и изменять их.

Если вы хотели изобрести систему, в которой другие не будут намеренно конфликтовать с вашей, почему бы не использовать схему пространства имен Java: взять принадлежащий вам домен и использовать его в качестве префикса, например com-example-myclassname? Немного менее читаемым и не более безопасным будет либо идентификатор вашего расширения, либо случайно сгенерированный шестнадцатеричный хэш SHA-1:

  • abcdefghijklmnop-myclassname
  • da39a3ee5e6b4b0d3255bfef95601890afd80709-myclassname

Я намеренно не включаю здесь динамические решения, потому что CSS обычно не является динамическим в расширениях или приложениях Chrome. Более того, CSP, вероятно, сделает этот подход чем угодно, но не простым (что хорошо).

1
sowbug 19 Мар 2013 в 07:16