#javascript #google-chrome #dom #svg
#javascript #google-chrome #dom #svg
Вопрос:
У меня проблема со следующим кодом в Google Chrome (он работает в Firefox)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Test load jsp</title>
</head>
<body>
<object id="alphasvg"></object>
</body>
<script src="http://code.jquery.com/jquery-2.1.1.js"></script>
<script>
var svg = "<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' id='svgid'><circle cx='40' cy='40' r='24' style='stroke:#006600; fill:#00cc00'/></svg>";
var encodedString = btoa(svg);
var svgdataencoded = 'data:image/svg xml;base64,' encodedString;
$('#alphasvg').attr('data', svgdataencoded);
var a = document.getElementById("alphasvg");
a.addEventListener("load", function() {
var svg = a.contentDocument.getElementById("svgid");
console.log(svg);
}, false);
</script>
</html>
Google Chrome выдает следующую ошибку
Неперехваченная ошибка безопасности: не удалось прочитать свойство ‘contentDocument’ из ‘HTMLObjectElement’: заблокирован фрейм с источником «http://server.mydomain.com:8080 » из-за доступа к фрейму с исходным значением «null». Фрейм, запрашивающий доступ, имеет протокол «http», фрейм, к которому осуществляется доступ, имеет протокол «data». Протоколы должны совпадать.
Есть ли у вас какое-либо решение для устранения этой ошибки?
Спасибо
Комментарии:
1. У вас есть SVG перед его загрузкой, поэтому, если вы хотите изменить его, вы всегда можете изменить исходные данные и перезагрузить их в качестве атрибута данных. Это так, или напишите патч для Chrome и отправьте его, я полагаю.
2. Это пример кода для отладки сообщения об ошибке из Chrome. SVG загружается асинхронно в мой рабочий код. В любом случае Chrome жалуется на протокол между http: и данными: