【问题标题】: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;
}

【问题讨论】:

    标签: javascript browser same-origin-policy


    【解决方案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))

    【讨论】:

    【解决方案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 即可触发它。
    • 这仍然会给出同源异常。
    猜你喜欢
    • 2023-03-29
    • 2015-11-12
    • 2015-08-26
    • 2012-06-23
    • 1970-01-01
    • 2021-04-14
    • 2014-08-09
    • 1970-01-01
    • 2014-04-20
    相关资源
    最近更新 更多