XSLT가 크롬에서 작동하는 비용이 있습니까?
여기 에 해당 XSL 파일 과 함께 제공 되는 XML 문서가 있습니다 . 변환은 JavaScript없이 클라이언트 측에서 실행됩니다.
이것은 IE (shock horror)에서는 잘 작동하지만 Google 크롬에서는 문서의 텍스트 노드 만합니다.
예제를 본 것처럼 Chrome에서 클라이언트 측에서 XSL을 수행 할 수 있다고 생각할 것이 아직 성공을 직접 복제 할 수 없습니다.
내가 도대체 뭘 잘못하고있는 겁니까?
Eric의 다른 대답은 잘못되었습니다. 그가 언급 한 네임 스페이스 선언은 문제와 관련이 없습니다.
작동하지 않는 진짜 이유는 보안 때문입니다 (cf. issue 4197 , issue 111905 ).
이 시나리오를 상상해.
다운로드 한 웹 페이지를 첨부 파일로 포함하는 공격자로부터 이메일 메시지를 수신합니다.
브라우저에서 현재 로컬 웹 페이지를 찾아 다.
로컬 웹 페이지
<iframe>
는 소스가 https://mail.google.com/mail/ 인을 만듭니다 .Gmail에 로그인 때문에 프레임은받은 편지함의 메시지를로드합니다.
로컬 웹 페이지는 JavaScript를 사용하여 프레임의 내용을 읽습니다
frames[0].document.documentElement.innerHTML
. (온라인 웹 페이지는 Gmail이 아닌 출처에서 왔기 때문에 단계를 수행 할 수 없습니다. 동일 출처 정책으로 인해 읽기가 실패합니다.)로컬 웹 페이지는받은 편지함의 내용을 통해
<textarea>
POST 양식을 통해 공격자의 웹 서버에 데이터를 전송합니다. 이제 공격자가받은 편지함 을 사용하여 스팸 을 보내 거나 도난을 이미지하는 데 할 수 있습니다.
Chrome은 Chrome을 사용하여 열리는 로컬 파일에 제한을 두어 위의 시나리오를 방해합니다 . 제한을 극복하기 위해 두 가지 솔루션이 있습니다.
--allow-file-access-from-files
플래그 와 함께 크롬을 실행 해보세요 . 직접 테스트와 작동한다면 시스템이 언급 될 것입니다.호스트에 업로드하면 문제가 해결됩니다.
글을 쓰는 시점에 버그를 트리거하기 위해 속성 이 필요한 크롬 버그 가 있습니다 xmlns
.
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" ... >
이것은 내가 서버에서 xml 파일 을 제공 할 때 어디에 있던 문제였습니다 .
나와 달리 url 에서file:///
XML 파일 을 보고있는 경우 언급 한 솔루션 --allow-file-access-from-files
이 원하는 솔루션 입니다.
localhost에서 같은 문제가 발생했습니다. 인터넷을 돌아 다니며 답을 찾고 나는 추가 --allow-file-access-from-files
작업을 승인 합니다. 저는 Mac에서 작업하기 때문에 터미널을 통해 sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files
암호를 입력해야합니다 (있는 경우).
또 다른 작은 것 -.xml 파일에 다음과 같이 .xsl 파일에 대한 참조를 추가하지 아무 것도 작동하지 않습니다 <?xml-stylesheet type="text/xsl" href="<path to file>"?>
. 내가 즉흥적이지 못한 또 다른 작은 점은 브라우저에서 .xml 파일을 열어야합니다. .xsl이 아닙니다.
에 따라 문제 크롬 정보] 아닌 XML 네임 스페이스 입니다 xmlns="http://www.w3.org/1999/xhtml"
. namesspace 속성이 작동하지 않습니다.
보안 제한 때문에 --allow-file-access-from-files
크롬을 시작할 때 플래그 를 추가해야합니다 . Linux / * nix 사용자는 터미널을 통해 쉽게 할 수있는 추가 생각하지만 Windows 사용자 의 경우 크롬 바로 가기 의 속성 을 사용해야합니다.
마우스 오른쪽 버튼 클릭-> 속성-> 대상
다음은 내 컴퓨터에서 사용하는 플래그가있는 샘플 전체 경로입니다.
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files
이 단계별로 Windows 사용자가 문제를 해결하는 데 도움이되기를 바랍니다. 이것이 제가이 게시물을 추가 한 이유입니다.
XML 파일 (표준 PI로 시작하는 경우 :
<?xml-stylesheet type="text/xsl" href="..."?>
XSL 스타일 시트 참조)는 "application / xml"로 제공됩니다. 이 경우 Chrome은 참조 된 XSL 스타일 시트를 계속 다운로드하지만 문서 유형을 "application / xml"에서 "Document"(! ??)로, "text / xsl"을 "로 자동 변경하지 않고 아무 것도하지 않습니다. "(! ??)를 입력 한 다음 먼저 XSLT 프로세서를 실행하지 않고 마치 HTML (5) 문서 인 것처럼 XML 문서를 처리합니다. 그리고 화면에 아무것도 표시되지 않고 (이 컨텐츠는 XML 페이지가 참조 된 이전 페이지가 계속 표시되고 문서가 완전히 표시되지 않은 것처럼 표시되지 않습니다.
모든 리소스가로드되어 있다고 해석 할 수 있습니다. Chrome 콘솔을 완벽하게 사용할 수 있습니다.
그렇습니다. Chrome은 현재 XML 파일 (선택적 선행 XSL 스타일 시트 선언) 만 기재합니다. 이는 "text / xml"로 제공되는 경우에만 "application xml"로 제공되는 경우에만 설명됩니다. XSL 선언.
'text / xml'또는 'application / xml'로 제공되고 XSL 스타일 시트가 포함되지 않은 XML 파일이 포함되어 있습니다. Chrome은 여전히 기본 스타일 시트를 사용하여 DOM 트리 또는 최소한의 텍스트 소스로해야합니다. 하지만 발음합니다. 여기서 다시 HTML 인 것처럼 버그를 시도하며, onLoad 이벤트를 처리하고 일부 자바 펼쳐를 삽입하기 위해 "document.body"에 액세스하려고 시도하는 많은 펼쳐 (기본 내부 펼쳐)에서 즉시가 발생합니다. 처리기.
Chrome에서 예상대로 작동하지 않지만 (Common Lisp 문서) 클라이언트 측 XSLT를 지원하는 IE에서는 작동하는 사이트의 예 :
http://common-lisp.net/project/bknr/static/lmman/toc.html
위의 색인 페이지는 올바르게 표시되지만 모든 링크는 기존 XSL 스타일 시트 문서에 대한 기본 XSL 선언이있는 XML 문서로 이동하며, 장에 다운로드하는 데 문제가 있다고 생각하여 무기한 기다릴 수 있습니다. 문서를 읽기 위해 할 수있는 일은 콘솔을 열고 리소스 탭에서 소스 코드를 읽는 것입니다.
내가 알 수있는 한, Chrome은 헤더를 찾고 있습니다.
콘텐츠 유형 : text / xml
그런 다음 작동합니다 --- 다른 반복이 실패했습니다.
웹 서버가이를 제공하는지 확인하십시오. 또한 file : // URI xml 파일에 대해 실패하는 이유를 설명합니다.
http://www.aranedabienesraices.com.ar 확인
이 사이트는 XML / XSLT 클라이언트 측으로 구축되었습니다. IE6-7-8, FF, O, Safari 및 Chrome에서 작동합니다. HTTP 헤더를 올바르게 보내고 있습니까? 동일 출처 정책을 준수하고 있습니까?
wwwroot에 파일을 넣어 보았습니다 . 따라서 Chrome에서 페이지에 액세스 할 때 이것은 localhost / yourpage.xml 주소 입니다.
Eric의 말이 맞습니다.
xsl에서 xsl : stylesheet 태그의 경우 다음 속성이 있습니다.
version = "1.0"xmlns : xsl = "http://www.w3.org/1999/XSL/Transform"xmlns = "http://www.w3.org/1999/xhtml"
크롬에서 잘 작동합니다.
나는 관리자 테스트하기 시작하고 로컬 파일 / Chrome 보안 문제에 직면했습니다. 매우 간단한 해결 방법은 XML 및 XSL 파일을 Dropbox 공용 링크에있는 두 파일에 대한 가져 오기입니다. XML 헤드에 XSL 변환에 대한 링크를 제안하십시오. Chrome에서 XML 링크를 사용하면 작동합니다!
8 년이 지나면 상황이 조금 바뀐다.
다른 매개 변수없이 Google 크롬의 새 세션을 열 수 있습니다. 'file :'스키마를 허용합니다.
macOS에서는 다음을 수행합니다.
open -n -a "Google Chrome" --args \
--disable-web-security \ # This disable all CORS and other security checks
--user-data-dir=$HOME/fakeChromeDir # This let you to force open a new Google Chrome session
이 인수가 제외 된 로컬에서 XSL 스타일 시트를 테스트 할 수 없습니다.
참고 URL : https://stackoverflow.com/questions/2981524/how-can-i-make-xslt-work-in-chrome
'ProgramingTip' 카테고리의 다른 글
OpenGL은 최하위 수준에서 어떻게 작동하고 있습니까? (0) | 2020.10.05 |
---|---|
MiniTest에서 테스트를 보류 중으로 표시 할 수 있습니까? (0) | 2020.10.05 |
Rails의 적절한 SCSS 자산 구조 (0) | 2020.10.05 |
표준 라이브러리를 사용하여 Go에서 중첩 된 템플릿을 있습니까? (0) | 2020.10.05 |
C #의 공변 및 반 변성 인터페이스 이해 (0) | 2020.10.05 |