Рассмотрим следующий фрагмент кода JavaScript:
const app = document.getElementById('root');
const svg = `<svg version="1.1" id="Layer_1"...`;
const obj = document.createElement('object');
obj.setAttribute('type', 'image/svg+xml');
obj.setAttribute('data', `data:image/svg+xml; base64,${btoa(svg)}`);
app.appendChild(obj);
setTimeout(() => {
console.log(obj.contentDocument.querySelector('svg'));
}, 1500);
(см. этот JSFiddle для полного примера)
При запуске в консоли (Google Chrome) отображается следующая ошибка:
Uncaught DOMException: Не удалось прочитать свойство contentDocument из "HTMLObjectElement": заблокирован кадр с источником " https://fiddle.jshell.net" из доступ к кадру скрещивания. at setTimeout (https://fiddle.jshell.net/_display:77:19)
С учетом этого;
-
Почему это считается запросом на кросс-начало при попытке доступа к
contentDocument
объекта, который был создан полностью динамически, без внешних ресурсов? -
Есть ли способ генерировать SVG динамически таким образом, не нарушая политику перекрестного происхождения браузеров?