스크립트 태그 hack 및 jsonp를 사용하여 상호 도메인 요청을하고 있습니다. 콜백 함수에서 document.write()를 사용하여받은 데이터를 DOM에 씁니다.jsonp 콜백에서 document.write
doc.write() 대신 appendChild/innerHTML을 사용해야한다는 것을 알고 있습니다. 내 제약 조건은 내가 쓰고 싶은 요소에 클래스/ID 훅이 없다는 것입니다. document.write()를 사용하여 "적절한 위치"에 쓸 수 있습니다.
다음 코드는 스크립트 태그에 HTML의 DIV에 포함되어 있습니다 :
function request_jsonp(){
var script = document.createElement('script');
var server_path = 'http://somedomain.com/?q=querystring&callback=request_callback';
script.setAttribute('src', server_path);
document.getElementsByTagName('head')[0].appendChild(script);
console.log('data requested');
// document.write('hello world'); // this gets written
}
function request_callback(data){
console.log('data received');
document.write(data);
}
request_jsonp();
window.onload = function(){
console.log('onload fired');
}
/*
above code prints
data requested
data received
onload fired
*/
는 기본적으로 document.write를 콜백 함수 내에서 정적 문자열로도 작동하지 않습니다. onload 전에 docment.write를 호출하면 페이지에 텍스트가 삽입 된 것으로 간주됩니다.
here JavaScript and HTML Script Tags
document.write()가 DOM에 쓰지 못하게하는 원인은 무엇입니까? 또한, 이것을하기위한 더 나은 접근 방법이 있습니까?
"쓰기를 원하는 요소에 클래스/ID 훅이 없습니다." - 그런 다음 jsonp의 GET 매개 변수를 통해 전송하십시오. – kirilloid
나는 나 자신을 분명히하지 않았다고 생각한다. GET을 통해 그것을 보내려면 먼저 id/class가 요소에 있어야합니다. – Yogesh
'Array.prototype.indexOf.call (document.getElementsByTagName ('* '), element)' – kirilloid