来自另一个域的iFrame如何摆脱它自己?

时间:2011-04-13 03:07:46

标签: javascript iframe cross-domain

我正在为各种基本上像这样运行的网站构建一个书签:

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

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

2 个答案:

答案 0 :(得分:0)

您可以尝试使用片段标识符进行跨域消息传递。有一个YUI库:http://www.julienlecomte.net/blog/2007/11/31/

答案 1 :(得分:0)

当您注入JS代码以在网站页面上创建表单时,您可以让服务器轮询(在新创建的iframe之外的js)以了解何时删除iframe。您可以使用各种方法来执行此操作,包括jsonp,长轮询,发布消息,片段标识符等。您不需要为此加载大型库 - 对于bookmarklet越小越好。