3

为了让我在 ie8 中选择文件,我必须将 isInput 函数的第二个语句设为 if 而不是 else if。

qq.isInput = function(maybeInput) {
    if (window.HTMLInputElement) {
        if (Object.prototype.toString.call(maybeInput) === '[object HTMLInputElement]') {
            if (maybeInput.type && maybeInput.type.toLowerCase() === 'file') {
                return true;
            }
        }
    }
    //else if (maybeInput.tagName) {
    if (maybeInput.tagName) {
        if (maybeInput.tagName.toLowerCase() === 'input') {
            if (maybeInput.type && maybeInput.type.toLowerCase() === 'file') {
                return true;
            }
        }
    }

    return false;
};

这种改变有意义吗?还是会破坏其他东西?

当我在 ie8 中调试 javascript 时,该函数通过了“window.HTMLInputElement”检查,但未能通过“Object.prototype.toString.call(maybeInput) === '[object HTMLInputElement]'”检查。

IE8 WIN XP SP3

4

1 回答 1

0

刚刚发布的 3.6.3 修补程序版本解决了这个问题

这是我修改代码以处理涉及多个窗口的环境时创建的又一个回归。

Fine Uploader 在 IE8 中被破坏,特别是由于 IE8 不遵循某些(恕我直言)声音逻辑。 qq.isInput首先检查是否windowHTMLInputElement“接口”的概念。如果是这样,它期望任何输入元素在调用参数时都将具有“[object HTMLInputElement]”的值toString(使用Object.prototype.toString)。显然,IE8 不订阅这个逻辑,因为值是“[object Object]”。

IE7 中存在相同的错误/不一致的逻辑(调用toString主机对象时),但这个特定问题在 IE7 中不是问题,因为 IE7 没有公开HTMLInputElement“接口”,因此,我们直接跳到下一个检查在不存在HTMLInputElement接口的情况下,它看起来更接近潜在的宿主对象,试图将其识别为输入元素。

于 2013-06-05T18:51:22.913 回答