Подтвердить что ты не робот

URL XMLNS W3 для спецификации SVG теперь бросает ошибку в Chrome

Я использовал эту маску SVG для оттенков серого в браузерах, где filter: grayscale(100%) не работает:

filter: url("data:image/svg+xml;utf8,<svg version='1.1' xmlns='http://www.w3.org/2000/svg' height='0'><filter id='greyscale'><feColorMatrix type='matrix' values='0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0' /></filter></svg>#greyscale");

Некоторое время назад это работало отлично, но теперь я получаю эту ошибку в консоли:

Небезопасная попытка загрузить URL-данные: image/svg + xml; utf8, http://www.w3.org/2000/svg 'height =' 0 ' > # greyscale из фрейма с URL [мой домен здесь]. Домены, протоколы и порты должны соответствовать.

Излишне говорить, что фильтр в оттенках серого больше не работает.

  • Можете ли вы объяснить, что происходит не так?
  • Можно ли это зафиксировать так, чтобы использовался тот же CSS-код, не возникает ошибка, и фильтр работает?
  • Учитывая, что он упоминает тот же домен и протокол, хотя я не знаю, как реализовать решение, поскольку я не понимаю проблему, я могу помещать и связывать файлы в том же домене/поддомене с тем же протоколом, вместо этого использования внешнего URL-адреса.

UPDATE:

Пользователь @Potherca прокомментировал:

... работал в Chrome 52, разбился на Chrome 53...

Это тоже мой опыт. Маска SVG не работает в текущей версии Chrome (версия Chrome 53.0.2785.116), но она работала в предыдущей версии. Он по-прежнему работает в Firefox и Safari.

ОБНОВЛЕНИЕ 2: Я попробовал его с https как ...xmlns='http://www.w3.org/2000/svg'..., но ошибка/ошибка сохраняется.

ОБНОВЛЕНИЕ 3: Как предложил пользователь @Potherca, перемещение строки фильтра SVG в начало списка правил перекрестного браузера устраняет ошибку. ПРИМЕЧАНИЕ. Это обходное решение, но основная ошибка все еще существует в Chrome/Safari/webkit, но не в других браузерах/наборах во время этого обновления.

4b9b3361

Ответ 1

У меня были подобные проблемы. Для поддержки нескольких браузеров в CSS было добавлено несколько строк filter.

Казалось, это вызвано тем, что фильтр SVG является последним в строке. Перемещая его перед другими линиями фильтров, Chrome использовал еще один filter, и ошибка исчезла.

.gray-out {
    -webkit-filter: grayscale(100%);
    filter: grayscale(100%);
    filter: gray;
    filter: url("data:image/svg+xml;utf8,<svg>...</svg>");/* Move this line up */
}

Ответ 2

Эта проблема возникла у меня в Chrome версии 59.0.3071.115 (Official Build) (64-разрядная версия)

Он работает после того, как я сделал изменение, основанное на предыдущем ответе

@media only screen and (min-width: 820px) {
            .brand-slider img {
                filter: grayscale(100%);
                -webkit-filter: grayscale(100%);
                -moz-filter: grayscale(100%);
                -ms-filter: grayscale(100%);
                -o-filter: grayscale(100%);

                filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 10+, Firefox on Android */

             transition: all 1000ms ease 0s;
            }
        }

Измененный код

@media only screen and (min-width: 820px) {
        .brand-slider img {

            filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 10+, Firefox on Android */

            filter: grayscale(100%);
            -webkit-filter: grayscale(100%);
            -moz-filter: grayscale(100%);
            -ms-filter: grayscale(100%);
            -o-filter: grayscale(100%);
         transition: all 1000ms ease 0s;
        }
    }

Ответ 3

Это может помочь кому-то, кто не использует SVG-фильтр, но все равно получает аналогичное сообщение об ошибке.

Небезопасная попытка загрузить URL-данные: image/svg + xml; utf8...

Я предполагаю, что Chrome и Firefox используют фильтры SVG под капотом, даже если вы определили правило CSS filter.

Так что в моем случае проблема была filter при некорректно отформатированном селекторе CSS-раскладки, который произошел из-за того, что я переключился с вложенности стиля SASS на вложенный CSS-стиль. Спецификация требует, чтобы вы запускали каждый вложенный селектор с помощью &.