访问跨域iframe history.length或在父文档的变量中获取其文本

时间:2009-10-01 16:32:06

标签: jquery security

我有一个反馈弹出窗口(TickBox),它会加载一个跨域iFrame,并在提交表单时加载“感谢....”页面。

我希望当用户提交反馈按钮时,它应该隐藏iFrame包装器。

我知道由于“同源策略”安全限制,您无法在iFrame更改时获得实际位置。

我的问题是,我可以通过history.length以某种方式获取历史记录,以检查这是否是新位置?

或者可以阅读其内容并找到新的页面文本(例如:“感谢”)并隐藏其包装

$("iframe").load(function(){
    var iframeSrc = $(this).contents()[0].location.hash; /*or history.length */
    var isSubmitedUrl = /Home_Landing/
    var testUrl = iframeSrc.search(isSubmitedUrl)

  if(testUrl >= 0){    /*or if(history.length >= 0)*/
    $(".iframeWrap").hide();
  }

 })

1 个答案:

答案 0 :(得分:2)

Same origin policy不仅限制访问iframe位置,还限制该iframe的整个window对象。

因此,如果您无法访问iframe的window,则无法访问iframe的window.history属性。

您甚至无法阅读自己文档中iframe的src属性,因为它不会反映iframe位置的变化。

我能想到的最好的方法是通过您自己服务器上的代理传递iframe的url,在这种情况下,您至少可以访问它的DOM并监听嵌入式"onsubmit" 1}},隐藏你的包装。