Как я могу проверить, есть ли у меня доступ к window.opener? - PullRequest
1 голос
/ 27 марта 2012

Как я могу проверить, есть ли у меня доступ к window.opener?

Я получаю сообщение об ошибке, если открываю страницу в новом окне из файла, который не связан с моей страницей (access denied).

Код:

if (window.opener) {
        if (window.opener.document.getElementById('myHidden') !== "undefined") {
            if (window.opener.document.getElementById('myHidden').value == "1" && $("#inputXYZ").val() != "1") {

В строке 2 возникает ошибка.Но только если я открою страницу со случайной страницы (которая, конечно, не имеет поля ввода с именем «myHidden»).Если я открываю страницу с «действительной» страницы, содержащей такой элемент, она работает.

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

Вы сравниваете экземпляр элемента со строкой "undefined", и вы не проверяете, присутствует ли window.opener.document (я не знаю, нужно это или нет, но этолегко добавить).Вы, вероятно, имели в виду:

// Note: Still not right, see below
if (typeof window.opener.document.getElementById('myHidden') !== "undefined")

... за исключением того, что это все еще не правильно, потому что getElementById возвращает null (не undefined), когда нет соответствующего элемента.

Воткак бы я это сделал:

var input = window.opener &&
            window.opener.document &&
            window.opener.document.getElementById('myHidden');
var value = input && input.value;
if (value != "1") {
    // Do something
}

При этом используется необычайно мощный оператор && (близкий родственник - необычайно мощный оператор || ).Первое назначение будет коротким замыканием, если window.opener или window.opener.document является "фальси" (null или undefined или 0 или "" или NaN или, конечно, false - ипоследние четыре не применяются), в результате input составляет undefined.Второе назначение будет коротким замыканием, если input является ложным, в результате value будет undefined.undefined! = "1", так что ...

1 голос
/ 27 марта 2012

Проверьте, есть ли у вас доступ к window.opener.document:

if (window.opener && window.opener.document) {
        if (window.opener.document.getElementById('myHidden') !== "undefined") {
                if (window.opener.document.getElementById('myHidden').value == "1" && $("#inputXYZ").val() != "1") {
                }
        }
}

И если вы хотите быть действительно уверенным, добавьте чек для window.opener.document.getElementById например

if (window.opener && window.opener.document && window.opener.document.getElementById) {
        if (window.opener.document.getElementById('myHidden') !== "undefined") {
                if (window.opener.document.getElementById('myHidden').value == "1" && $("#inputXYZ").val() != "1") {
                }
        }
}
...