Подтвердить что ты не робот

JavaScript, чтобы определить, имеет ли родительский кадр один и тот же источник?

Я ищу кросс-браузерный способ определить, является ли родительский кадр тем же самым происхождением, что и мой кадр, желательно без печати предупреждений на консоли ошибок JavaScript.

Кажется, что работает следующее, но я бы хотел избежать ошибок печати на консоли (по крайней мере, Safari и Chrome делают это при доступе к location.href на родительском фрейме. Firefox выдает исключение, которое может быть уловлено):

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

Ответ 1

Я бы сделал что-то вроде:

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

Ответ 2

Я использую этот метод, чтобы определить, содержит ли iframe локальный контент,

но вы также можете передать его window.top из iframe

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))

Ответ 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;
}