Возвращаемое значение modaldialog после обратной передачи

У меня есть всплывающее окно, которое будет искать элементы из сетки. Возвращает значение на родительскую страницу, когда строка выбирается напрямую. Но если я ищу в сетке нажатием кнопки и выбираю строку, родительская страница получает неопределенный объект, хотя из всплывающего окна возвращаются правильные значения. Как родительская страница может получить правильные значения?

1 ответ

Решение

ОП упомянул об этом в комментарии к вопросу, но чтобы прояснить: этот ответ является копией этого ответа пользователя ConnorsFan.Если ответ будет обновлен, скорее всего, там появятся какие-либо обновления.


Чтобы продолжать использовать showModalDialog на моей странице, мне пришлось придумать собственный обходной путь для этой ошибки. Итак, вот оно...

В Google Chrome после обратной передачи showModalDialog всегда возвращает неопределенное значение. Однако свойство window.opener в модальном диалоговом окне указывает на окно вызывающей стороны даже после обратных передач. Итак, я подумал о том, чтобы поместить результат диалога в свойство returnValue этого окна вызывающей стороны. И это работает.

В окне звонящего:

var prevReturnValue = window.returnValue; // Save the current returnValue
window.returnValue = undefined;
var dlgReturnValue = window.showModalDialog(...);
if (dlgReturnValue == undefined) // We don't know here if undefined is the real result...
{
    // So we take no chance, in case this is the Google Chrome bug
    dlgReturnValue = window.returnValue;
}
window.returnValue = prevReturnValue; // Restore the original returnValue

На этом этапе используйте dlgReturnValue для дальнейшей обработки. В модальном диалоговом окне:

if (window.opener)
{
    window.opener.returnValue = dateValue;
}
window.returnValue = dateValue;
self.close();
Другие вопросы по тегам