Не можете вызвать window.parent из IE7? - PullRequest
4 голосов
/ 29 ноября 2011

Я пытаюсь сделать простой вызов в родительский класс из модального всплывающего окна, но IE борется со мной все время.Будем очень благодарны за любые предложения, чтобы обойти это.

Ниже приведен упрощенный код, который я пытаюсь использовать.Он хорошо работает в FireFox, но в IE выдает ошибку: «Объект не поддерживает это свойство или метод», ссылаясь на строку кода в блоке «Catch».Это означает, что строка в блоке Try и Catch не работает.

parent.html

<html><head>
<script>
function callMain(msg)
{
    alert(msg);
}

function modalWin() {
    if (window.showModalDialog) {
        window.showModalDialog("topFrame1.html","name",
        "dialogWidth:255px;dialogHeight:250px");
    } else {
        window.open('topFrame1.html','name',
        'toolbar=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,modal=yes');
    }
}

function getMainFrameVal()
{
    return document.getElementById("mainframe").value;
}

</script>
</head> <body>
<a href="#" onclick="modalWin()" >PopUpWindow</a>
<form>
<input type=text id="mainframe" value="main"/>
</body></html>

topFrame1.html

<html><head>
<script type="text/javascript">
function getMain(){
try{
    alert("1 "+ window.opener.getMainFrameVal());
}catch(e)
{
    alert("2 " +window.parent.getMainFrameVal());
}
}
</script>
</head> <body>
TOP <a href="#" onclick="getMain()">click for main</a> <br/><br/>
</body></html>

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Модальное диалоговое окно IE не является настоящим окном и не поддерживает window.opener. Чтобы сослаться на родительское окно, вам нужно будет передать ссылку на окно как часть аргументов диалога, например:

    window.showModalDialog("topFrame1.html",["name", window],
    "dialogWidth:255px;dialogHeight:250px");

Затем вы можете сослаться на родителя у ребенка с помощью этой строки:

    alert("1 "+ window.dialogArguments[1].getMainFrameVal());

Мой совет, однако, заключается в том, чтобы вообще избегать диалогов IE и использовать только одно решение, которое работает во всех браузерах, например window.open() или jQuery диалогов .

0 голосов
/ 29 ноября 2011

window.opener для использования с открывающимися всплывающими окнами с window.open().

Вы уверены, что parent.html является родителем topFrame1.html, и вы не используете тайно набор фреймов или что-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...