使用window.name的跨域-应该使用double onload吗?

罗伊·纳米尔(Roi Namir)

我正在努力弄清楚为什么我的代码以特定方式(而不是其他方式)工作:

+----------------------------+
| jsfiddle                   |
|                            |
|              +---------+   |
|              |         |   |
|              |  jsbin  |   |
|              +---------+   |    
+----------------------------+

目标:

jsfiddle应该连接到jsbinjsbin应该返回数据到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处理程序iframeloadRequest)。

但是该loadRequest方法-再次--attach (!! --line#5)一个onload函数。

我不明白为什么它会这样工作。

我的意思是:常识告诉我该loadRequest方法应该是:

function loadRequest()
    { 
             alert(f.contentWindow.name);
             frame.parentNode.removeChild(frame);
    }

但这是行不通的。

我想念什么?(任何其他尝试都会显示:跨域错误)

达格·纳比特

您需要先将iframe窗口发送回父窗口可访问的域,然后再检查window.name,否则会出现跨域错误。因此,在加载并设置了远程页面之后window.name,您可以将其发送到about:blank,而不受同一来源策略的限制,然后window.name从父窗口中进行读取

这里第一个技巧是,window.name无论您将窗口发送到何处,它都会缠住。因此,您将窗口发送到远程域,对其进行设置window.name,将其发送回可访问域,然后进行读取。

第二个诀窍是,about:blank对于两个幸福的环境AB等等-没有跨域错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我应该使用window.onload事件吗

来自分类Dev

代码在使用window.onload而不是document.ready时有效吗?为什么?

来自分类Dev

在phantomjs中使用“ window.onload”

来自分类Dev

为什么要使用window.onload

来自分类Dev

在window.onload中使用回调

来自分类Dev

如何使用postMessage发送跨域数据?

来自分类Dev

在跨域调用中使用JSONP

来自分类Dev

使用JQuery的JSON Get请求(跨域)

来自分类Dev

jQuery:使用laravel跨域Ajax'POST'

来自分类Dev

使用AJAX发送HTTP跨域请求

来自分类Dev

如何使用jQuery加载跨域HTML

来自分类Dev

使用$ http服务的AngularJS跨域请求

来自分类Dev

在PhoneGap中使用跨域发布数据

来自分类Dev

如何使用postMessage发送跨域数据?

来自分类Dev

如何使用跨域json数据?

来自分类Dev

使用jQuery解析跨域xml的问题

来自分类Dev

使用Jquery进行跨域Ajax调用

来自分类Dev

使用$ http服务的AngularJS跨域请求

来自分类Dev

使用BasicAuth的跨域JSON请求

来自分类Dev

使用BasicAuth的跨域JSON请求

来自分类Dev

使用PHP解决跨域错误?

来自分类Dev

应该使用should吗?

来自分类Dev

我应该使用IIFE还是window onload进行初始化?

来自分类Dev

我应该使用IIFE还是window onload进行初始化?

来自分类Dev

NSSet:我应该在NSSet中使用float / double吗?

来自分类Dev

有什么方法可以使用onload函数在图像上加载文本吗?

来自分类Dev

我应该使用参考吗?

来自分类Dev

我应该使用LightOpenID吗?

来自分类Dev

应该仍然使用@synthesize吗?