Javascript 如何识别第三方iframe中的Ajax更新
当页面加载时,它包括第三方iframe(读取:文件上传程序)。我选择一个文件,点击“开始上传”按钮,上传完成后,我会收到一条“谢谢-上传完成”的消息Javascript 如何识别第三方iframe中的Ajax更新,javascript,ajax,jquery,brightcove,Javascript,Ajax,Jquery,Brightcove,当页面加载时,它包括第三方iframe(读取:文件上传程序)。我选择一个文件,点击“开始上传”按钮,上传完成后,我会收到一条“谢谢-上传完成”的消息 没有Ajax响应(据我所知) 第三方允许我指定消息。我还可以补充。。。对这条信息的回应 上传完成后,我需要用我从一开始就知道的上传文件id更新隐藏的输入。如果“上传完成”消息/时刻/事件,我希望捕获/使用的内容。但是页面的动态性对我来说有些陌生,我需要一些支持 提前谢谢 不幸的是,除非iframe与您的代码位于同一主机/域中,否则您将无法访问i
- 没有Ajax响应(据我所知)
- 第三方允许我指定消息。我还可以补充。。。对这条信息的回应
提前谢谢 不幸的是,除非iframe与您的代码位于同一主机/域中,否则您将无法访问iframe的任何有用属性。这是一个由所有当前/有价值的浏览器实现的安全特性,称为同源或跨域策略
<script>
if( window && window.parent && window.parent.iframeSuccess ){
window.parent.iframeSuccess();
}
</script>
在第三方iframe中检测更改的唯一选项是,第三方代码是否支持向周围的帧发送消息。有几种方法可以做到这一点,但它们需要支持。如果他们不这样做,你就无能为力了。如果是我,我会检查以下内容:
下面的代码仅在两侧都属于同一个域(外部框架和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。知道/理解这两种方式都很好。我会查看你的更新(上面),并让你知道我是怎么做的。