Угловое дезинфицирующее средство нарушает API vzaar, если атрибут src не задан жестко? - PullRequest
0 голосов
/ 21 марта 2019

У меня есть iframe в шаблоне angular2 + html, который встраивает видео, размещенное на vzaar. Видео отображается и воспроизводится нормально, и я могу использовать vzaar API чтобы получить длительность, время воспроизведения и некоторые другие данные о воспроизводимом видео ... IFF атрибут src в iframe жестко задан.

Я понимаю, что проблема может быть в каком-то предположении, внутреннем для API vzaar, но я подозреваю, что средство очистки Angular DOM не отправляет простую строку, и API vzaar ожидает, что значение атрибута src iframe будет простая строка.

Вот жестко закодированный атрибут src, который прекрасно работает:

<iframe name="my_video" title="video player" id="my_video" src="//view.vzaar.com/11616962/player" frameborder="0" allowfullscreen="" allowtransparency="true"type="text/html" webkitallowfullscreen="" mozallowfullscreen=""></iframe>

Если я пытаюсь изменить атрибут src на строковое значение, сгенерированное в моем компоненте, я получаю «используемое небезопасное значение ...», поэтому я должен очистить URL-адрес от компонента:

this.iframe_src = this.sanitizer.bypassSecurityTrustResourceUrl('//view.vzaar.com/' + this.episode.video_id + '/player');

Затем я могу использовать очищенный URL для успешной загрузки iframe снова:

<iframe name="my_video" title="video player" id="my_video" [src]=iframe_src frameborder="0" allowfullscreen="" allowtransparency="true"type="text/html" webkitallowfullscreen="" mozallowfullscreen=""></iframe>

... но теперь метод ready () API vzaar никогда не срабатывает:

const vzp = new vzPlayer('my_video'); vzp.ready(function () { console.log('API is ready'); }

Опять же, я понимаю, что vzaar API - гораздо более узкая тема, чем Angular2, но я думаю, что это больше связано с тем, что DOM sanitizer делает ... что-то ... с атрибутом src iframe, не позволяя API vzaar работать. Функция vzPlayer (string) принимает id iframe, а затем автоматически находит этот элемент в DOM и подключается к нему, поэтому я думаю, что когда я даю этому iframe санированный URL, санированный URL выглядит «странно», так что этот класс никогда не инициализируется.

Вот еще одна подсказка: если я записываю значение из моего компонента в консоль, я получаю это:

iframe_src: SafeResourceUrlImpl {changingThisBreaksApplicationSecurity: "//view.vzaar.com/11616962/player"}

... определенно не простая строка. Может ли это быть тем, что сбивает с толку API vzaar? Есть ли способ обойти это? Должен ли я выполнять санитарную обработку другим способом, чтобы убедиться, что значение атрибута src является простой строкой? Я доверяю URL-адресам в базе данных, потому что я создаю их из идентификаторов видео, которые я сам загрузил.

Спасибо за любую помощь по этому вопросу.

...