Вопрос
Существует ли чистый и надежный способ обработки вызовов к плагину, чтобы вызывающая сторона всегда могла ожидать, что ему будет возвращен массив JavaScript, независимо от того, используется ли плагинтакое дополнение Firefox или элемент управления ActiveX?У меня уже есть фактические вызовы плагинов, заключенные в функции, например:
function getDevice(deviceKey) {
return plugin.getDevice(deviceKey);
}
Я могу изменить его на что-то вроде:
function getDevice(deviceKey) {
return normalizeArray(plugin.getDevice(deviceKey));
}
function normalizeArray(array) {
return typeof(array) == 'unknown' ? array.toArray() : array;
}
, но мне все еще нужно помнить, чтобы на самом деле вызватьnormalizeArray из функций-оболочек, и реализация нормализации может показаться, что ей не хватает надежности и / или сделаны некоторые подозрительные предположения.
Есть ли лучший способ справиться с этой ситуацией?
Справочная информация
Я пишу некоторый JavaScript для взаимодействия с плагином через JavaScript.Плагин доступен как дополнение в FF и как ActiveX в IE.В плагине есть несколько методов, которые возвращают массивы.В FF вызов:
typeof(retVal);
для объекта возвращает 'объект'.Я могу делать такие вещи, как:
retVal.length;
retval[0];
, и они работают как положеноКогда я делаю те же самые вызовы методов в IE, вызов:
typeof(retVal);
возвращает значение unknown и такие вызовы, как:
retVal.length;
retval[0];
не определены.
Я имеювыполнил некоторую отладку и обнаружил, что ActiveX действительно возвращает массив вариантов.Этот объект распознается JScript, и версию массива JavaScript можно получить, вызвав retVal.toArray ().