1

jQuery-Terminal 是一个非常好的插件,在网页上有一个文本模式的终端界面。但是在 .HTA 而不是 .HTML 上运行时,它会弹出一个错误:“对 'in' 的无效操作:预期的对象”。别担心,我已经用丑陋的方式修复了它。问题是:如何通过 jQuery-Terminal.js 本身修复它?

/* .HTA 文件类似于 .HTML,但不是由浏览器运行,而是 Microsoft Windows 内置了一个不同的解释器 mshta.exe,以运行 HTA,而不受 .HTML 的所有限制。*/

我的解决方案是在“jquery-1.10.2.js”中添加一个if()语句(所以很丑),如下图:

    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

4

1 回答 1

0

如果您在源代码中搜索,inArray您只会找到两个地方,一个是

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

这是一个错字它应该是名称(数组)而不是名称(字符串)

于 2013-08-26T20:08:25.383 回答