문제
SVG는 XML 기반 그래픽이며 자바 스크립트를 추가 할 수 있습니다. SVG에 정의 된 스크립트 기능에 액세스하려고했습니다. 내 SVG의 스크립트는 다음과 같습니다.
<svg ... onload="RunScript(evt);"...>
<script type="text/javascript">
...
function RunScript(loadEvent) {
// Get object in my html by id
var objElement = top.document.getElementById('objid1');
if (objElement)
{
// Extend object tag object's methods
objElement.SVGsetDimension = setDimension;
...
}
function setDimention(w, h) {...}
내 기본 HTML 파일에서 SVG는 다음과 같은 객체 태그에 포함됩니다.
<object id="objid1" data="mygrahic.svg" ... >
<a href="#" onclick="document.getElementById('objid1').SVGsetDimention(10, 10);
return false;"
...>Set new dimention</a>...
이것은 잘 작동합니다. 그러나 SVG XML 파일이 다음과 같은 전체 URL (다른 사이트의)에 의해 참조되는 경우.
<object id="objid1" data="http://www.artlibrary.net/myaccount/mygrahic.svg" ... >
코드는 더 이상 작동하지 않습니다. SVG 스크립트에 정의 된 메소드를 기본 HTML 객체 태그 요소의 메소드에 첨부 할 수 없거나이 경우 상단 또는 문서를 사용할 수 없거나 getElementById (..)를 찾을 수없는 것 같습니다. 내 SVG 스크립트. HTML 요소를 찾기 위해 SVG XML 스크립트에서 할 수있는 방법이 있습니까?
이 문제가 다른 DOM에 의해 야기되는지 확실하지 않으며 SVG 스크립트 코드가 다른 DOM의 객체 또는 요소를 파악할 수있는 방법이 없습니다. 해결책이 있으면 좋을 것입니다.
해결책
실마리가 '다른 사이트에'있을 수 있다고 생각합니다. 다른 사이트의 JavaScript 프로그램이 Teach Other와 의사 소통 할 수있는시기에 대한 엄격한 규칙이 있습니다. 임베디드 SVG는 내부의 문서와 같은 방식으로 처리되고 있습니다. iframe
일 것이다.
다른 팁
따라서, 당신이하고있는 일은 브라우저의 관점에서 다음과 같습니다.
<script>
function stealPassword() {
var passwordInput = document.querySelector('input[type="password"]');
var value = passwordInput.value; // My password!
sendPasswordToServerToStealMyMoney(value);
}
</script>
<iframe src=mybank.com onload=stealPassword()></iframe>
이것이 왜 이것이 바람직하지 않은지 이해할 것이라고 생각합니다. (그래도 오류 콘솔에 경고 나 예외가있을 것입니다.)
PDC는 이것을 맞습니다. 브라우저는 크로스 사이트 스크립팅 공격 (XSS)을 방지하기 위해 열심히 노력하며 결과입니다. 다른 도메인에서로드 된 문서에서 스크립트를 실행하거나 다른 포트 또는 프로토콜을 사용할 수 없습니다. 자세한 내용은 다음을 참조하십시오. http://en.wikipedia.org/wiki/same_origin_policy
내 경험에서; 코드는 사실이므로 정확히 실행됩니다. 내 PC Windows 7, IE9는 Adobe Viewer를 설치했습니다. SVG 뷰어 인 IE9 SVG가 그려졌지만 SVG 태그 애니메이션을 실행할 수는 없으면 JavaScript 애니메이션 만 실행할 수 있습니다. 따라서 Windows XP, IE8에서 Adobe SVG Viewer를 설치 한 동일한 결과 (정확히 실행).
Firefox SVG는 내 PC에서 정확히 실행할 수 없습니다 (SVG ecmascript 애니메이션).