JavaScript для определения, если родительский фрейм того же происхождения? - PullRequest
25 голосов
/ 05 апреля 2010

Я ищу кросс-браузерный способ определения того, имеет ли родительский фрейм то же происхождение, что и мой фрейм, желательно без вывода предупреждений на консоль ошибок 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 ]

9 голосов
/ 16 апреля 2010

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

var sameOrigin;
try
{
    sameOrigin = window.parent.location.host == window.location.host;
}
catch (e)
{
    sameOrigin = false;
}
return sameOrigin;
1 голос
/ 05 апреля 2010

Я использую этот метод, чтобы определить, содержит ли 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))

0 голосов
/ 05 апреля 2010

Попробуйте это:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...