С Chrome37, showModalDialog
has been obsoleted. Если вы используете более старый Chrome, прочитайте this SO answer.
В IE11: Если возвращаемое значение диалогового окна является либо массивом, либо объектом, он не может получить доступ к свойствам своего прототипа. Это приводит, например, к ошибке alert(modal_return_value)
и вызывает ошибку SCRIPT5011 Can't execute code from a freed script
(alert
использует метод toString()
в прототипе).
Как-то это даже понятно, поскольку прототип фактически находится в окне, которое было закрыто до того, как вы получите доступ к этим свойствам. Я не уверен, что это ошибка или намеченная функция в IE11, но в любом случае это раздражает.
Однако вы можете получить доступ к собственным свойствам возвращаемого объекта. Например, вы можете выполнять итерацию по массиву с использованием цикла for
, и даже alert(modal_return_value[n])
будет работать.
Или вы можете создать новый массив из возвращаемого значения, что-то вроде этого:
var arr = showModalDialog('returnsArray.htm');
if (!arr) {/* Dialog cancelled, do something */}
arr = Array.prototype.splice.call(arr, 0);
В последней строке мы позаимствовать splice
метод Array.prototype
и создать новый массив из возвращаемого массива.
Пожалуйста, поделитесь небольшим количеством кода или (предпочтительно) функциональной демонстрацией. – Sampson
функция doYes() { \t var val = []; \t val.push ("A"); val.push ("B"); window.returnValue = val; } Даже массив работает в firefox не в IE9 .. см. Фрагмент кода в showModalDialog box. функция doYes() { \t var val = {}; \t val.x = "A"; val.y = "B"; window.returnValue = val; } Это также работает в firefox не в IE9 .. см. Фрагмент кода в showModalDialog box. –
Пожалуйста, отредактируйте ваш вопрос, чтобы добавить свой код. – Sampson