jsonPを使用してクロスドメイン情報を共有するスクリプトを使用しています。それはうまく機能しますが、私はそれをIIFEの中に入れる必要があります。
var domain = "http://example.com/";
var myObj = {
recupData : function(data){
if (data.id) {
console.log(data.id);
}
},
scriptTag : function() {
var siteOrigin = domain+"check?q=myObj.recupData",
script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.src = siteOrigin;
document.getElementsByTagName('HEAD')[0].appendChild(script);
}
}
myObj.scriptTag();
それはうまくいきます!(構造を示すために、グローバルスクリプトのごく一部を取り上げただけなので、構文エラーが発生したとしても、それは重要ではありません)。
しかし、このコードを自己呼び出し関数であるIIFEに入れると、問題が発生します。
(function(){
var domain = "http://example.com/";
var myObj = {
recupData : function(data){
if (data.id) {
console.log(data.id);
}
},
scriptTag : function() {
var siteOrigin = domain+"check?q=myObj.recupData",
script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.src = siteOrigin;
document.getElementsByTagName('HEAD')[0].appendChild(script);
}
}
myObj.scriptTag();
})();
myObjが定義されていないというエラーが表示されます。エラーは、scriptTagメソッドから発生します。IIFEを追加するまで、このメソッドにアクセスできない理由がよくわかりません。何も変更しないでください。グローバル名前空間を汚染します。文脈上の問題だと思いますが、説明が必要です。