Возвращаемое значение 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();