У меня есть простой скрипт приложений, который использует службу html, и мне нужен: после псевдоселектора.
Свернув проблему на строку кода, у меня есть
<style>
test:after {
content: attr(data-hidden);
display: inline-block;
font-weight: bold;
}
</style>
<test data-hidden="Now you don't">Now you see me </test>
В jsfiddle ожидаемый результат был бы "Теперь вы видите меня, теперь вы этого не делаете ", но я получаю только "Теперь вы видите меня",
Если я удалю: после получения Теперь вы видите меня, как и ожидалось.
FWIW Я использую.setSandboxMode(HtmlService.SandboxMode.NATIVE)
Может ли кто-нибудь сказать мне, что я делаю неправильно?
Строка content: attr()
удаляется компилятором caja. Попробуйте фрагмент кода на игровой площадке Caja и просмотрите визуализированный результат, который должен быть лучшим представлением о том, как HTML будет дезинфицироваться, когда он будет использоваться в Google Apps Script, чем вы получите в jsfiddle.
Вот что получается:
<caja-v-html>
<caja-v-head>
<style>
.CajaGadget2___ caja-v-test:after{
display:inline-block;
font-weight:bold;}
</style>
</caja-v-head>
<caja-v-body>
<caja-v-test data-caja-data-hidden="Now you don't">Now you see me </caja-v-test>
</caja-v-body>
</caja-v-html>
data-hidden
атрибут <test>
сохраняется, но в нем нет атрибута content
чтобы его содержать. Вероятно, это потому, что утверждение attr()
представляется вектором атаки. (пример)
Если мы снова попробуем с постоянным content
, он выживет в уговоре:
<caja-v-html>
<caja-v-head>
<style>
.CajaGadget2___ caja-v-test:after{
content:"waffles"; <<<<<<
display:inline-block;
font-weight:bold;}
</style>
</caja-v-head>
<caja-v-body>
<caja-v-test data-caja-data-hidden="Now you don't">Now you see me </caja-v-test>
</caja-v-body>
</caja-v-html>
Из-за санитарии вы не сможете заставить attr()
работать таким образом. Вы можете ввести проблему в Caja Issue Tracker.