用于检测父框架是否具有相同原点的JavaScript?

时间:2010-04-05 00:13:55

标签: javascript browser same-origin-policy

我正在寻找一种跨浏览器的方式来检测父帧是否与我的帧相同,最好不要在JavaScript错误控制台上打印警告。

以下似乎有效,但我想避免在控制台上打印错误(至少Safari和Chrome在访问父框架上的location.href时会这样做.Firefox抛出一个可以捕获的异常):

function parentIsSameOrigin() {
    var result = true;
    try {
        result = window.parent.location.href !== undefined;
    } catch (e) {
        result = false;
    }
    return result;
}

3 个答案:

答案 0 :(得分:9)

我会做类似的事情:

var sameOrigin;
try
{
    sameOrigin = window.parent.location.host == window.location.host;
}
catch (e)
{
    sameOrigin = false;
}
return sameOrigin;

答案 1 :(得分:1)

我使用此方法判断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
    }
}

//测试用例警报(islocal(window.top))

答案 2 :(得分:0)

试试这个:

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;
}