自分のコードが特定の方法で (他の方法ではなく) 動作する理由を理解するのに苦労しています:
+----------------------------+
| jsfiddle |
| |
| +---------+ |
| | | |
| | jsbin | |
| +---------+ |
+----------------------------+
目標:
jsfiddle
に接続しjsbin
、使用してデータを返すjsbin
必要があります (クロスドメイン手法)。jsfiddle
window.name
(繰り返しますが、コードは機能しています)
jsbin's
応答は次の HTML ページです。
<script>
window.name = 1*(new Date());
</script>
そして、ここにコードがありますjsFiddle
:
/*1*/ var f;
/*2*/
/*3*/ function loadRequest()
/*4*/ {
/*5*/ f.onload = function ()
/*6*/ {
/*7*/ alert(f.contentWindow.name);
/*8*/ frame.parentNode.removeChild(frame);
/*9*/ }
/*10*/ f.src = 'about:blank';
/*11*/ }
/*12*/
/*13*/ $(".b").on('click', function ()
/*14*/ {
/*15*/ f = document.createElement('iframe');
/*16*/ f.name = framename = 'fetchData';
/*17*/ f.onload = loadRequest;
/*18*/ f.src = 'http://jsbin.com/AjUyoYU/8/quiet';
/*19*/ document.body.appendChild(f);
/*20*/ });
ご覧のとおり、コードは機能します: http://jsfiddle.net/7Nawt/2/
では、問題はどこにあるのでしょうか?
17 行目を見ると、 のハンドラをアタッチしています。( )。onload
iframe
loadRequest
しかし、loadRequest
メソッドは - 順番に --再び (!! --line #5)関数をアタッチしonload
ます。
なぜこのように機能しているのかわかりません。
つまり、常識では、loadRequest
メソッドは次のようにする必要があります。
function loadRequest()
{
alert(f.contentWindow.name);
frame.parentNode.removeChild(frame);
}
しかし、それは機能していません。
何が欠けていますか?(その他の試行は表示されます: クロスドメイン エラー)