Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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中的Ajax更新_Javascript_Ajax_Jquery_Brightcove - Fatal编程技术网

Javascript 如何识别第三方iframe中的Ajax更新

Javascript 如何识别第三方iframe中的Ajax更新,javascript,ajax,jquery,brightcove,Javascript,Ajax,Jquery,Brightcove,当页面加载时,它包括第三方iframe(读取:文件上传程序)。我选择一个文件,点击“开始上传”按钮,上传完成后,我会收到一条“谢谢-上传完成”的消息 没有Ajax响应(据我所知) 第三方允许我指定消息。我还可以补充。。。对这条信息的回应 上传完成后,我需要用我从一开始就知道的上传文件id更新隐藏的输入。如果“上传完成”消息/时刻/事件,我希望捕获/使用的内容。但是页面的动态性对我来说有些陌生,我需要一些支持 提前谢谢 不幸的是,除非iframe与您的代码位于同一主机/域中,否则您将无法访问i

当页面加载时,它包括第三方iframe(读取:文件上传程序)。我选择一个文件,点击“开始上传”按钮,上传完成后,我会收到一条“谢谢-上传完成”的消息

  • 没有Ajax响应(据我所知)

  • 第三方允许我指定消息。我还可以补充。。。对这条信息的回应

上传完成后,我需要用我从一开始就知道的上传文件id更新隐藏的输入。如果“上传完成”消息/时刻/事件,我希望捕获/使用的内容。但是页面的动态性对我来说有些陌生,我需要一些支持


提前谢谢

不幸的是,除非iframe与您的代码位于同一主机/域中,否则您将无法访问iframe的任何有用属性。这是一个由所有当前/有价值的浏览器实现的安全特性,称为同源或跨域策略

<script>
if( window && window.parent && window.parent.iframeSuccess ){
  window.parent.iframeSuccess();
}
</script>
在第三方iframe中检测更改的唯一选项是,第三方代码是否支持向周围的帧发送消息。有几种方法可以做到这一点,但它们需要支持。如果他们不这样做,你就无能为力了。如果是我,我会检查以下内容:

  • 阅读第三方文档,看看它们是否支持触发任何js消息或事件
  • 看看除了iframe之外,第三方系统是否提供了另一种实现相同功能的方法
  • 脚本标签? 关于您可以添加的消息,您是否测试过是否可以向该消息添加任何HTML标记?这不太可能,但如果是这样,您可以添加自己的脚本标记以与帧通信,触发自己的函数(即“window.iframesucture”),并告诉您事件已发生。。。
    下面的代码仅在两侧都属于同一个域(外部框架和iframe)时才起作用。否则它将被同一来源策略阻止

    <script>
    if( window && window.parent && window.parent.iframeSuccess ){
      window.parent.iframeSuccess();
    }
    </script>
    
    然后,放置在iframe中的代码:

    if( window && window.parent && window.parent.postMessage ){
      window.parent.postMessage('success', 
         'http://the-domain-we-are-sending-to.com');
    }
    
    有关更多信息,您可以在此处阅读:

    图像标签? 如果它们阻止脚本标记,则可能允许使用图像标记。如果是这种情况,您有一个稍微棘手的选择,即嵌入一个向服务器端脚本报告的图像,然后服务器端脚本可以在数据库中标记事件

    <img src="http://mysite.com/image-that-is-actually-a-script.php?id=user-id" />
    
    
    

    然而,要让javascript注意到这个事件,您需要某种轮询系统,该系统不断地从js(通过ajax或websockets)检查服务器端数据库,并且您需要能够使用某种id来唯一地识别双方(您和第三方)的用户。因此,只有当第三方系统允许您在向用户显示的消息中插入用户id(或某些其他唯一的用户信息)时,此方法才真正可行。如果您没有其他选择,这几乎是最后的退路。

    据我所知,同源策略不允许访问第三方iframe内容。您是否拥有iframe中的代码?@ReyiNamir-Nope。这就是我所说的第三方。谢谢@pebbl是的,据我所知,我可以在HTML响应中添加脚本标记。需要明确的是,iframSuccess()函数将在我的“父”页面代码中,而iframe将能够接触到这一点,对吗?我这样问是因为我尝试了一个隐藏在HTML响应中的简单输入(在iframe中),而$\u POST没有看到该输入。提前感谢您的帮助。好吧,这不是一个好迹象,是不是“错误:访问属性“iframeSuccess”的权限被拒绝”(来自FireBug)。反过来呢?我可以给出我的上传完整消息id=“iframe upload success”,然后听听家长的意见吗?啊,很抱歉,是的,当然,如果你不拥有该域,反过来也不行-你又被跨域策略阻止了。我将编辑我的答案。嘿@Pebbl。又是Thx。知道/理解这两种方式都很好。我会查看你的更新(上面),并让你知道我是怎么做的。