現在、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
andsrc
属性を必要なものに置き換えるだけです。id
(に等しい私たちはこのような状況でと仮定しますmySpecialId
保存するために)使用されるデータをにwindow.jsonData["mySpecialId"]
。
つまり、スクリプトをid
使用するすべてのiframeについて、onload
そのデータが指定されたオブジェクトに同期的に読み込まれます。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>
Chromeでテストされ、Firefoxで動作するはずです。IEまたはSafariについて不明です。