【发布时间】:2013-10-29 13:03:46
【问题描述】:
我正在努力弄清楚为什么我的代码以特定方式(而不是其他方式)工作:
+----------------------------+
| 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 行,我确实为 iframe 附加了一个 onload 处理程序。 (loadRequest)。
但是 loadRequest 方法 - 反过来 --attachs again(!! --line #5) 一个 onload 函数。
我不明白为什么它是这样工作。
我的意思是:常识告诉我loadRequest 方法应该是:
function loadRequest()
{
alert(f.contentWindow.name);
frame.parentNode.removeChild(frame);
}
但它不起作用。
我错过了什么? (任何其他尝试显示:跨域错误)
【问题讨论】: