来自同一域的 iframe 和跨浏览器脚本

发布于 2024-11-28 08:49:50 字数 203 浏览 0 评论 0原文

假设从 foo.bar.com/parent.htm 提供的页面包含指向 bar.com/child.htm 的 iframe。

位于parent.htm 中的脚本可以调用child.htm 中定义的函数吗?

看起来这应该可行,因为parent.htm和child.htm都来自同一个域。我收到访问被拒绝的消息,但我想知道为什么?

谢谢, 约翰

Say a page served from foo.bar.com/parent.htm contains an iframe that points to bar.com/child.htm.

Can a script located in parent.htm call a function defined in child.htm?

Seems like this should work because parent.htm and child.htm both eminate from the same domain. I am getting an access denied message, but I would like to know why?

Thanks,
John

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

爱情眠于流年 2024-12-05 08:49:50

否。看看维基百科,例如:http://en.wikipedia.org/wiki/Same_origin_policy。

为了说明这一点,下表概述了典型结果
用于检查 URL“http://www.example.com/dir/page.html”。

http://v2.www.example.com/dir/other.html - 失败 - 不同的主机(需要完全匹配)

No. Look at Wikipedia, for example: http://en.wikipedia.org/wiki/Same_origin_policy.

To illustrate, the following table gives an overview of typical outcomes
for checks against the URL "http://www.example.com/dir/page.html".

http://v2.www.example.com/dir/other.html - Failure - Different host (exact match required)

隐诗 2024-12-05 08:49:50

从浏览器的角度来看,它们被视为同一域

They are not considered the same domain from the browser's standpoint

夜访吸血鬼 2024-12-05 08:49:50

这是设计使然。为不同客户端使用子域的托管服务需要安全地隔离它们。

This is by design. Hosting services that use subdomains for different clients need to isolate them safely.

烙印 2024-12-05 08:49:50

是的,在两个页面中设置document.domain = 'bar.com',就可以跨框架访问数据了。这只适用于同一个域,例如您不能将 document.domain 设置为“not-the-current-domain.com”

或者我通常做的事情:

document.domain = document.domain.replace(/.*?([^\.]+\.[^\.]+)$/, '$1');

设置 document.domain 到当前根域(例如删除任何子域)

Yes, set document.domain = 'bar.com' in both pages and you can then access data cross-frame. This only works on the same domain, e.g. you can't set document.domain to "not-the-current-domain.com"

Or what I usually do:

document.domain = document.domain.replace(/.*?([^\.]+\.[^\.]+)$/, '$1');

which sets document.domain to the current root domain (e.g. strips any sub-domains)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文