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

tlr*_*son 25 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;
}
Run Code Online (Sandbox Code Playgroud)

Zac*_*ach 9

我会做的事情如下:

var sameOrigin;
try
{
    sameOrigin = window.parent.location.host == window.location.host;
}
catch (e)
{
    sameOrigin = false;
}
return sameOrigin;
Run Code Online (Sandbox Code Playgroud)

  • 我遗憾地花了几个小时来使用这个解决方案,但却发现这对于WebKit不起作用,其中同一起源错误是无法发现的.不要使用此解决方案. (3认同)
  • @Spork,使用最新的Chrome(43),我没有这个问题。能告诉您在哪个浏览器/版本上发生此问题吗? (2认同)

shi*_*kou 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 那里似乎有一个额外的“this”,但即使我删除它,我也会收到警告。只需访问“window.parent.location.href”即可触发它。 (3认同)