2014-10-10 2 views
0

Является ли «законным» иметь SVG с данными в чужом домене, то есть (data = «// da86ge957603k.cloudfront.net/rails/grafitti_logo-f4e8238a87c979c0cf5b41481c982b71.svg») , а затем связать событие загрузки с объектом и затем получить доступ к SVG DOM объекта через свойство contentdocument? Я могу сделать это, когда SVG находится в локальном домене, но всякий раз, когда я пытаюсь разместить SVG в другом месте, я получаю ошибки «this.contentDocument is null». Я также попробовал getSVGDocument(). Я не могу найти нигде, где говорится, что это проблема междоменной безопасности, и из того, что я могу сказать, должно быть допустимо использование тега объекта, используемого для SVG (я не использую iFrame). Я ценю, что вы нашли время, чтобы помочь мне. Вот код, который я использую для встраивания объекта и привязки, и пытаюсь получить доступ к DOM (как я уже говорил, это работает, когда SVG находится в локальном домене).Документ с содержимым SVG с несколькими доменами

<object id="gangstergraffiti" type="image/svg+xml" data="<%= image_url("grafitti_logo.svg") %>">Gangster</object> 

$("#gangstergraffiti").each(function() { 
    this.addEventListener('load', svgGangsterGraffitiReady, false); 
}); 

function svgGangsterGraffitiReady(){ 
    var graffitistrokes = this.contentDocument.getElementsByClassName('graffiti'); 
    for (var i = 0; i < graffitistrokes.length; i++) { 
    graffitistrokes[i].setAttribute("stroke", "white"); 
    graffitistrokes[i].setAttribute("fill", "white"); 
    } 
} 

Dan

+1

UAs следует предотвратить это. Если вы контролируете удаленный сайт, вы можете настроить CORS, чтобы обойти это: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS –

+0

Благодарим вас за ответ. Похоже, что это предотвращается, я просто не могу найти тот факт, что это ожидаемое поведение, зарегистрированное где угодно. Я дам вам смысл ответить. – dps

+0

Привет @dps, вам удалось сделать эту работу? Я не могу заставить какой-либо браузер выполнять предполетный запрос перед загрузкой ресурса, и это, по-видимому, является причиной того, что я не могу получить доступ к документу содержимого. Реализация, которую я имею, кажется, идентична вашей. – Kukosk

ответ

0

Это документально here by w3c. В detail here for the object tag вы не можете выполнять перекрестный доступ к данным тега <object>, кроме как через CORS.

Существует more readable distillation on MDN, и, чтобы обойти его, вы должны enable CORS на удаленном сайте (если можете).

+0

Спасибо за вашу помощь :-) – dps

Смежные вопросы