2010-12-09 2 views
2

Opera 용 사용자 JS를 작성 중입니다. 확장자가없는 요청에 대해 반응합니다 (예 : /stuff/code/MyFile이거나 자바 스크립트와 관련이없는 매크로가 있습니다 (예 : /stuff/code/load.do. 응답의 콘텐츠 형식은 순수 JavaScript 소스 (text/javascript)를 반환하더라도 text/html으로 설정됩니다. 서버 코드에 대한 액세스 권한이 없으므로이 코드를 사용하면됩니다.Opera User-JS : 원시 서버 응답을 얻으려면 어떻게해야합니까?

지금 문제는 라인 번호 등으로 소스를 포맷하여 Opera 내부에 표시하고자하는 것입니다. 따라서, 나는 AfterEvent.DOMContentLoaded (또한 시도했습니다 AfterEvent.load, 같은 건)에 반응하는 일부 사용자 - JS 썼습니다. 본문, 즉 자바 스크립트 코드에 액세스하려면 e.event.target.body.innerHTML으로 읽습니다.

원본 만 HTML 태그 또는 비교 연산자 (<,>)를 포함하지 않으면이 둘만으로도 잘 작동합니다. 그것이 있기 때문에, 나는 결코 내가 원하는 출력을 얻지 못한다. Opera는 text/html -response를 자체 표현 형식으로 변환하는 내부 논리를 갖고있는 것으로 보입니다. 여기에는 예를 들어 HTML 태그가 제거 된 후 CRLF 또는 두 개의 "일치하는"< 및> (비교 연산자!) 사이의 코드가 각각의 단어 뒤에 =""을 적용하여 하나의 단일 행으로 함께 잘립니다.

문제가있는 부분입니다.

사용자 -JS없이 동일한 URL을 요청한 다음 "페이지"의 소스를 보면 서버가 보낸 것과 동일한 깨끗한 JavaScript 코드를 볼 수 있습니다. 그리고 이것은 내가 접근하고자하는 것입니다.

innerHTML 대신 innerText을 사용하면 오페라는 파일을 원본과 다른 HTML 태그를 제거합니다.

나는 또한 outerHTML, outerTexttextContent을 보려고했지만 모두 동일한 문제가 있습니다.

나는 오페라가 여기서 아무 것도하지 않는다는 것을 안다. 서버는 text/html이고 Opera는 응답의 종류가 보통 text/html 일 경우 간단하다고 말합니다.

따라서 제 질문은 : 사용자 JS로 손길이 닿지 않은 응답을받을 수있는 방법이 있습니까?

+0

오페라 왔을 때 텍스트/자바 스크립트 응답, 여전히'

actual text goes here
'에 둘러싸 및 응답 텍스트/자바 스크립트 인 경우 확인할 방법이 없다 (또는 텍스트/*하지만 text/html과 다른) . –

답변

0

JS에서 미리 파싱 된 마크 업에 액세스 할 수있는 방법이 없습니다. 이를 수행하는 유일한 방법은 XMLHttpRequest를 사용하여 직접 콘텐츠를 요청하는 것입니다.

+0

분명히 이것이 내가 두려워했던 대답이었습니다. 음 ... – sjngm

+0

프로토콜의 경우 :이 질문을 올바른 대답으로 선택하지만 문제가 해결되지 않습니다. – sjngm

+0

조심해서 사용하십시오. XHR to location.href는 매우 약합니다. Opera는 현재 문서의 캐싱에 문제가 있습니다 (예 : XHR을 통한 HEAD가 너무 일찍 전송되어 Opera가 문서를 전혀 표시하지 않거나 영원히 "요청할 수 있습니다. .. 완료 ") –

관련 문제