Javascript 是否可以检测页面是否由特定域生成框架?

Javascript 是否可以检测页面是否由特定域生成框架?,javascript,iframe,Javascript,Iframe,是否可以测试页面是否由特定域使用JavaScript构建 像这样: if (window!=window.top){ if (this page is iframed by www.foo.com){ // load foo's special navigation bar} if (this page is iframed by www.bar.com){ // load bar's special navigation bar} } else { //load normal na

是否可以测试页面是否由特定域使用JavaScript构建

像这样:

if (window!=window.top){
   if (this page is iframed by www.foo.com){ // load foo's special navigation bar}
   if (this page is iframed by www.bar.com){ // load bar's special navigation bar}
} else { //load normal navigation bar }

编辑/更新:虽然可以获取父iframe的域名,但我不想删除此答案,因为有一些有用的信息可以帮助理解访问DOM的相同域策略。Soumya92的回答证明了一个域上的iframe确实可以检索父域的域

但是,关于DOM访问的其他信息仍然适用

原始答案 不幸的是,这在大多数浏览器中还不可能实现,除非两个网站都通过设置
document.domain
属性授予其他域访问每个域的数据的权限,否则这绝对不可能实现。即使这样,它也只适用于子域

例如,
foo.example.com
bar.example.com
可以访问彼此的DOM,只要这两个
HTML页面都设置了
document.domain
属性,如下所示:

// allow foo.example.com and bar.example.com to communicate
document.domain = "example.com";  
如果您试图检查
www.foo.com
是否是从
www.bar.com
加载的文档的父级,您将无法执行此操作,因为iframe将无法访问
top.window

您可以确定iframe是否加载在同一个域中,并在遇到同一个域策略错误时使用推断能力确定它不是从同一个域加载的

除此之外,您将无法确定有关哪个域正在加载您的文档的任何细节。

试试看

var parentLocation='';
if(window.parent && document.referrer)
    parentLocation = document.referrer;
alert(parentLocation);

您应该在警报框中看到父页面的url。其余的,正如他们所说,是历史…

可能有权访问
window.top.location
?例如,我有3个网站,它们将始终被视为:foo.com、bar.com和example.com。所有网站都作为子域托管,因此它们也以foo.example.com、bar.example.com和example.com的形式存在,但从未以这种方式查看过。您的示例能否与我的“设置”一起使用。@Dave-您可以使用重写规则强制域重定向到子域。那将是唯一的办法。例如,
local.sandbox.com
local.sandbox2.com
是我的Apache服务器上的同一个文件夹(服务器别名),但是@Zoidberg中的示例仅在我使用同一个域(或带有
document.domain
的子域)时有效。如果我想允许
local.sandbox
local.sandbox2
之间的通信,我必须重写其中一个以匹配另一个。这是利用现有技术实现这一目标的唯一途径。注意,重写涉及域所有权。回答得很好。我将删除我的,因为你的代码工作@戴夫-你应该选择这个作为答案,因为它会解决你的问题;但是,请记住,您仍然无法访问DOM。如果window.parent是从“https:”(安全)url提供的,则这似乎不起作用。