문제

서버에 수정할 수 없는 자바스크립트 파일이 있습니다.

다운로드해야 하는 스크립트 샘플은 다음과 같습니다.

var tags = '';
tags += '<a href="#somelink"><img src="someimage.gif"/></a>;
document.write(tags);

AJAX를 통해 스크립트를 다운로드하고 실행하기 시작했는데 "document.write는 비동기 호출에서 실행할 수 없습니다" 문제에 부딪혔습니다.

그래서 나는 스크립트를 일반 텍스트로 다운로드하고 응답에서 필요한 것을 가져와 원본 스크립트를 수정하지 않고 내 HTML 페이지의 위치에 배치하고 싶었습니다.

$.ajax({
    type: "GET",
    url: "http://myurlexample.com",
    dataType: "text",
}).success(function(msg){
    console && console.log("The script was downloaded as text: "+msg);
}).error(function(object,status,errortxt){
    console && console.log("The script wasn't downloaded as text. The error:"+ errortxt);
});

하지만 다음을 사용하여 다운로드 요청을 수행하면 AJAX에서 오류가 발생합니다. dataType = "text".이 문제를 해결하고 실제로 텍스트로 다운로드할 수 있는 방법이 있습니까?

추신:해당 스크립트는 Firefox OS 권한이 있는 앱용이므로 보안 CSP에서 허용하지 않기 때문에 html 페이지에 직접 스크립트를 넣을 수 없습니다(https://developer.mozilla.org/en-US/Apps/CSP).

도움이 되었습니까?

해결책

넌 할 수 있을 것 같으니까 달리다 어떻게든 스크립트가 성공적으로 작동할 수 있는 끔찍한 아이디어는 다음과 같습니다.덮어쓰기 document.write.

스크립트를 실행하기 전에 다음을 수행하십시오.

document.write = function(msg) {
    handleTagStringInApp(msg);
    delete document.write; // revert to original document.write when done
};
// now load execute the script...

어디 handleTagStringInApp 태그 문자열을 어떻게든 처리하기 위해 작성하는 함수입니다.이는 기본적으로 JSONP이지만 눈에 띄지 않거나 도움이 되도록 콜백 이름을 조정할 수 없으며 대신 콜백 이름을 사용해야 합니다. document.write.

참고로 이렇게 됩니다 정말 나쁘다 앱의 다른 항목이 실제로 사용해야 하는 경우 document.write.(실제 코드에 대한 참조를 유지하여 자신의 코드에서 이 문제를 해결할 수 있습니다. document.write, 예를 들어 다음을 사용하여 var realDocWrite = document.write; 페이지를 로드하고 호출할 때 realDocWrite.call(document, "whatever").)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top