2014-12-20 3 views
0

От showmodaldialog window.returnValue в Firefox Я получаю объект массива, но в IE и Chrome получается ошибка.Как вернуть объект массива из окна showmodaldialog в браузере IE и Chrome?

function doYes() { 
    var val=[]; 
    val.push("A"); 
    val.push("B"); 
    window.returnValue =val; 
} 

Даже массив работает в Firefox не в IE9. См. Фрагмент кода в поле showModalDialog.

function doYes() { 
    var val={}; 
    val.x="A"; 
    val.y="B"; 
    window.returnValue =val; 
} 

Это также работает в Firefox не в IE9.

+1

Пожалуйста, поделитесь небольшим количеством кода или (предпочтительно) функциональной демонстрацией. – Sampson

+0

функция 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. –

+0

Пожалуйста, отредактируйте ваш вопрос, чтобы добавить свой код. – Sampson

ответ

1

С Chrome37, showModalDialoghas 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 и создать новый массив из возвращаемого массива.

+0

функция doYes() { \t var val = []; \t val.push ("A"); val.push ("B"); window.returnValue = val; } Даже массив работает в firefox не в IE9 .. см. Фрагмент кода в showModalDialog box. –

 Смежные вопросы

  • Нет связанных вопросов^_^