有没有办法“突破”iframe?我的意思是,人们会将我的javascript标记放在iframe中(有时它最终会嵌套iframe,但现在只处理ONE)。我正在尝试收集某些信息,例如iframe位于页面上的位置。当你不在iframe中并且混合了offsetLeft / offsetTop / innerHeight / innerWidth时,这很容易做到,但我知道你不能(或者不应该)在iframe之外看到任何东西你的(假设不同的域,它将是)。
有人对此有任何提示吗?或者至少我可以研究更多的资源?虽然我最终希望能够访问原始页面的DOM,而在iframe中使用JS,我知道这不可能。现在,我很高兴能够找出iframe在页面上的位置。我不确定该信息是否属于DOM或浏览器属性(我相信您仍然可以访问?)
谢谢!
答案 0 :(得分:3)
简短的回答是否定的。
更长的答案是,使用CORS和跨框架/域消息传递,您现在比以前更好。但是如果你试图从另一个域访问父框架中的DOM,你会得到一个胖的“拒绝访问”。
如果您在父级中添加了一些javascript,可以加载像您的服务器上设置cookie的图像,那么是的。但我猜这不是你的意思
以下是有关如何获取原点的示例 - 让iframe的用户加载如下:
<script type="text/javascript">
document.write('<script src="yourIframeLoader.php?parent='+escape(location.href)+'"><\/script>');
</script>
答案 1 :(得分:1)
这不适用于跨域。保持javascript不在域之间工作是一个主要的安全功能(它被称为同源策略)。
想象一下,你从一个邪恶的网站开始:www.evil.com
。从那里,不知何故,他们欺骗你点击你希望带你到一个敏感网站(PayPal,你的银行,等等)的链接。虽然他们实际上没有将您发送到该网站,但实际上我已将其框架化。您可以继续登录.BAM。
如果他们的脚本可以访问跨域iFrame的DOM,他们可以很容易地抓住您通过登录表单传递的任何数据。讨厌,嗯?没有办法安全地处理这个问题,所以它被关闭了(除了,可以说是JSONP)
答案 2 :(得分:0)
您始终可以在父页面上实现一些javascript函数,并通过调用parent.Myfunction();
至于确定iframe的位置,我不确定那个。
答案 3 :(得分:0)
虽然iFrame无法直接更改其父级,但父级可以从iFrame中读取数据。
这意味着父HTML页面可以使用JS来查看子iFrame中的数据。
如果您同时控制父内容和iFrame内容,则可以通过iFrame中约定的元素ID设置从iFrame传递到父级的消息。