현재 script
태그로는 불가능 iframe
하지만 동일한 도메인에서 가져온 경우 가능 합니다.
<iframe
id="mySpecialId"
src="/my/link/to/some.json"
onload="(()=>{if(!window.jsonData){window.jsonData={}}try{window.jsonData[this.id]=JSON.parse(this.contentWindow.document.body.textContent.trim())}catch(e){console.warn(e)}this.remove();})();"
onerror="((err)=>console.warn(err))();"
style="display: none;"
></iframe>
위의 내용을 사용하려면 id
및 src
속성을 필요한 것으로 바꾸십시오 . id
(우리는이 상황에서 가정합니다 이는 동일 mySpecialId
상점에 사용되는) 데이터 의를 window.jsonData["mySpecialId"]
.
즉, id
및 onload
스크립트를 사용하는 모든 iframe에 대해 해당 데이터 가 지정된 아래의 개체에 동기식으로 로드 됩니다.window.jsonData
id
나는 이것을 재미로하고 그것이 "가능하다"는 것을 보여주기 위해했지만 나는 그것을 사용하는 것을 추천 하지 않는다 .
대신 콜백을 사용하는 대안이 있습니다.
<script>
function someCallback(data){
console.log(data);
}
function jsonOnLoad(callback){
const raw = this.contentWindow.document.body.textContent.trim();
try {
const data = JSON.parse(raw);
callback(data);
}catch(e){
console.warn(e.message);
}
this.remove();
}
</script>
<!-- I frame with src pointing to json file on server, onload we apply "this" to have the iframe context, display none as we don't want to show the iframe -->
<iframe src="your/link/to/some.json" onload="jsonOnLoad.apply(this, someCallback)" style="display: none;"></iframe>
크롬에서 테스트되었으며 파이어 폭스에서 작동합니다. IE 또는 Safari에 대해 잘 모르겠습니다.