을 사용하여 Chrome의 iframe에 정의 된 자바 스크립트 기능 호출이 질문은 완전히 업데이트 된 질문의 유형과 매우 유사합니다. How to call a JavaScript function from one frame to another in Chrome/Webkit with file protocol — 불행히도이 질문은 실제로 답변 된 적이 없습니다.파일 프로토콜
iframe에 SVG 이미지가 포함 된 HTML 페이지가 있습니다. SVG는 JavaScript API를 내 보내서 유용한 작업을 수행 할 수 있습니다 (확대/축소 및 중앙 정렬, "실제 크기"로 표시). iframe 아래에 사용자가 해당 호출을 클릭하여 SVG에 정의 된 함수를 호출 할 수있는 버튼을 배치했습니다.
내 코드는 다음과 같습니다
function reset() {
document.getElementByID('iframe').contentWindow.reset();
}
그것은 사파리, 파이어 폭스, 심지어 IE 9에서 완벽하게 작동합니다 (SVGs을 지원합니다 - 만세!). 하지만 Chrome에서는 오류가 발생합니다. 디버거가 다음과 같이 알려줍니다.
Property 'reset' of object [object DOMWindow] is not a function
사실, 'contentWindow'는 DOMWindow 유형이지만, 메소드 나 필드가 없습니다 (적어도 디버거가 표시하지는 않습니다). 그것의 '문서'필드를 요구하는 것조차도 실패합니다 (null이됩니다).
포함 된 HTML과 포함 된 SVG를 모두 전송하려면 file : // 프로토콜을 사용하는 것으로 나타납니다. 내가 위에서 언급 한 질문에서 언급 한 바와 같이, 크롬 'contentWindow를'액세스 할 수있는 시도가 만들어 다음과 같은 오류 발생 : 일반적으로
Attempt to access frame with URL file://[...]/contained.svg from frame with URL file://[...]/container.html. Domains, protocols and ports must match.
을, 나는 보안이 좋은 생각; 이것은 보안에 영감을받은 제한과 같습니다. 하지만 여기서는 너무 지나친 것처럼 보입니다.이 파일은 사용자의 파일 시스템에있는 파일입니다. 결국 내 경우에는 같은 디렉토리에 있습니다.
코드 호스팅은 옵션이 아니며 사용자 컴퓨터에 있어야합니다. 나는 사람들에게 "크롬을 사용하지 말라. 보안에 대한 어리석은 생각"이라고 말해야한다.
이 제한 사항을 해결할 방법이 없습니까?
예 - 그 트릭을 수행합니다. 고맙습니다. 하지만 왜 그걸 잠근거야? 파일 - 투 - HTTP 또는 HTTP - 투 - 파일 또는 ... 나에게 의미가 있습니다. 그러나 File-to-File? 내가 고려하고 있지 않은 몇 가지 보안 취약점이 있어야합니다. –