Ошибка jQuery-Terminal при запуске на.HTA вместо.HTML. Я могу исправить это безобразно

jQuery-Terminal - очень хороший плагин, чтобы иметь текстовый интерфейс терминала на веб-странице. Но появляется ошибка: "Недопустимая операция для" in ": ожидается объект" при запуске на.HTA вместо.HTML. Не волнуйтесь, я исправил это ужасно. Вопрос: как это исправить самим jQuery-Terminal.js?

/ *.HTA файл похож на.HTML, но вместо запуска в браузерах в Microsoft Windows встроенный интерпретатор mshta.exe для запуска HTA без всех этих ограничений на.HTML. */

Мое решение состоит в том, чтобы добавить оператор if() в "jquery-1.10.2.js" (так это ужасно), как показано ниже:

    inArray: function( elem, arr, i ) {
        var len;

        if ( arr ) {
            if ( core_indexOf ) {
                return core_indexOf.call( arr, elem, i );
            }

            len = arr.length;
            i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;

            for ( ; i < len; i++ ) {
// ----------- I add this statement -------------------------------------------------------
                if ( typeof arr == 'string' && arr.indexOf(elem) != -1 ) {
                    return i;
                }
// --------------------------------------------------------------------------------------
                // Skip accessing in sparse arrays
                if ( i in arr && arr[ i ] === elem ) {
                    return i;
                }
            }
        }

        return -1;
    },

Самое странное, что 'arr' считается массивом. Но когда это действительно "строка", браузер WWW не будет жаловаться на что-либо, а интерпретатор HTA mshta.exe предупредит об ошибке, упомянутой выше. Я считаю, что это ошибка в самом плагине jQuery-Terminal-xxxx.js.

Я надеюсь, что плагин jQuery-Terminal-xxxx.js исправит это когда-нибудь или даже лучше узнать, как исправить это в jQuery-Terminal-xxxx.js сейчас?

Упрощенный пример и все подробности можно найти здесь, http://www.evernote.com/shard/s22/sh/9f47a3fb-16ad-4761-b2ab-d702b9886c2e/577e35cd6e9ab8ee0cb7f3529e985be9

1 ответ

Решение

Если вы ищете inArray в исходном коде вы найдете только два места, одно

if (!$.inArray(interpreter_name, name)) {
    names.push(interpreter_name);
    $.Storage.set(name, $.json_stringify(names));
}

это опечатка, это должны быть имена (массив), а не имя (строка)

Другие вопросы по тегам