Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自另一个域的iFrame如何摆脱自身?_Javascript_Iframe_Cross Domain - Fatal编程技术网

Javascript 来自另一个域的iFrame如何摆脱自身?

Javascript 来自另一个域的iFrame如何摆脱自身?,javascript,iframe,cross-domain,Javascript,Iframe,Cross Domain,我正在为各种网站构建书签,这些网站的功能基本上如下: 用户导航到foo.com(不在我控制范围内的外部站点) 用户单击浏览器上的书签,从foo.com获取一些信息,并将其显示在iframe内bar.com的表单上 用户在bar.com内提交表单,该表单位于foo.com内 iframe消失了 问题是如何让iFrame自行删除。由于无法访问另一个域中父域内的函数,因此无法创建自定义函数parent.removieframe(),甚至无法创建window.top.location.reload()。

我正在为各种网站构建书签,这些网站的功能基本上如下:

  • 用户导航到foo.com(不在我控制范围内的外部站点)
  • 用户单击浏览器上的书签,从foo.com获取一些信息,并将其显示在iframe内bar.com的表单上
  • 用户在bar.com内提交表单,该表单位于foo.com内
  • iframe消失了
  • 问题是如何让iFrame自行删除。由于无法访问另一个域中父域内的函数,因此无法创建自定义函数parent.removieframe(),甚至无法创建window.top.location.reload()。我尝试了很多技术,但都因为跨域脚本而失败


    我解决这个问题的方法是将top.location.href更改为我在bar.com/back.html上构建的自定义页面,它所做的只是发送一个“history.back()”命令,将用户反弹到原始页面上。尽管很有创意,但我认为这不是一个非常优雅的解决方案。有更好的方法吗?

    您可以尝试使用片段标识符进行跨域消息传递。它有一个YUI库:

    当您注入JS代码在站点页面上创建表单时,您可以让它轮询(新创建的iframe之外的JS)您的服务器,以知道何时删除iframe。您可以使用各种各样的方法来实现这一点,包括jsonp、长轮询、post消息、片段标识符等。您不需要为此加载一个大库——bookmarklet越小越好