JavaScript 检测父框架是不是同源?
Posted
技术标签:
【中文标题】JavaScript 检测父框架是不是同源?【英文标题】:JavaScript to detect if the parent frame is of the same origin?JavaScript 检测父框架是否同源? 【发布时间】:2011-02-04 07:19:01 【问题描述】:我正在寻找一种跨浏览器的方法来检测父框架是否与我的框架同源,最好不要在 javascript 错误控制台上打印警告。
以下似乎可行,但我想避免将错误打印到控制台(至少 Safari 和 Chrome 在访问父框架上的 location.href 时会这样做。Firefox 抛出一个可以被捕获的异常):
function parentIsSameOrigin()
var result = true;
try
result = window.parent.location.href !== undefined;
catch (e)
result = false;
return result;
【问题讨论】:
【参考方案1】:我会这样做:
var sameOrigin;
try
sameOrigin = window.parent.location.host == window.location.host;
catch (e)
sameOrigin = false;
return sameOrigin;
【讨论】:
谢谢 - 这真的让我很生气! 遗憾的是,我花了几个小时在这个解决方案上,却发现这不适用于同源错误无法解决的 WebKit。不要使用此解决方案。 @Spork,我使用最近的 Chrome (43) 没有这个问题。请问这个问题出现在哪个浏览器/版本上?【参考方案2】:我使用这种方法来判断 iframe 是否包含本地内容,
但你也可以从 iframe 传递 window.top
function islocal(win)
var H=location.href,
local= H.substring(0, H.indexOf(location.pathname));
try
win=win.document;
return win && win.URL && win.URL.indexOf(local)== 0;
catch(er)
return false
//测试用例alert(islocal(window.top))
【讨论】:
这不是跨浏览器,因为window.URL
support varies greatly
唯一不支持 window.URL 的浏览器已报废。所以除非你是 JQuery....【参考方案3】:
试试这个:
function parentIsSameOrigin()
var result = true;
if (window.parent)
result = Boolean
(
// more precise modifications needed here
window.this.location.href.indexOf(window.parent.location.href) == 0
);
return result;
【讨论】:
那里似乎有一个额外的“this”,但即使我删除它,我也会收到警告。只需访问window.parent.location.href
即可触发它。
这仍然会给出同源异常。以上是关于JavaScript 检测父框架是不是同源?的主要内容,如果未能解决你的问题,请参考以下文章
高级篇javascript静态页面传值的三种方法 url方法,取值方便,可跨域; cookie方法,同源访问; window.open方法,指向父窗口
高级篇javascript静态页面传值的三种方法 url方法,取值方便,可跨域; cookie方法,同源访问; window.open方法,指向父窗口