_iframeTransport(item) {
            var form = element('<form style="display: none;" />');
            var iframe = element('<iframe name="iframeTransport' + Date.now() + '">');
            var input = item._input;

            var timeout = 0;
            var timer = null;
            var isTimedOut = false;

            if(item._form) item._form.replaceWith(input); // remove old form
            item._form = form; // save link to new form

            input.prop('name', item.alias);

            forEach(item.formData, (obj) => {
                forEach(obj, (value, key) => {
                    var element_ = element('<input type="hidden" name="' + key + '" />');
                    element_.val(value);
                    form.append(element_);
                });
            });

            form.prop({
                action: item.url,
                method: 'POST',
                target: iframe.prop('name'),
                enctype: 'multipart/form-data',
                encoding: 'multipart/form-data' // old IE
            });

            iframe.bind('load', () => {
                var html = '';
                var status = 200;

                try {
                    // Fix for legacy IE browsers that loads internal error page
                    // when failed WS response received. In consequence iframe
                    // content access denied error is thrown becouse trying to
                    // access cross domain page. When such thing occurs notifying
                    // with empty response object. See more info at:
                    // http://stackoverflow.com/questions/151362/access-is-denied-error-on-accessing-iframe-document-object
                    // Note that if non standard 4xx or 5xx error code returned
                    // from WS then response content can be accessed without error
                    // but 'XHR' status becomes 200. In order to avoid confusion
                    // returning response via same 'success' event handler.

                    // fixed angular.contents() for iframes
                    html = iframe[0].contentDocument.body.innerHTML;
                } catch(e) {
                    // in case we run into the access-is-denied error or we have another error on the server side
                    // (intentional 500,40... errors), we at least say 'something went wrong' -> 500
                    status = 500;
                }

                if (timer) {
                    clearTimeout(timer);
                }
                timer = null;

                if (isTimedOut) {
                    return false; //throw 'Request Timeout'
                }

                var xhr = {response: html, status: status, dummy: true};
                var headers = {};
                var response = this._transformResponse(xhr.response, headers);

                this._onSuccessItem(item, response, xhr.status, headers);
                this._onCompleteItem(item, response, xhr.status, headers);
            });

            form.abort = () => {
                var xhr = {status: 0, dummy: true};
                var headers = {};
                var response;

                iframe.unbind('load').prop('src', 'javascript:false;');
                form.replaceWith(input);

                this._onCancelItem(item, response, xhr.status, headers);
                this._onCompleteItem(item, response, xhr.status, headers);
            };

            input.after(form);
            form.append(input).append(iframe);

            timeout = item.timeout || 0;
            timer = null;

            if (timeout) {
                timer = setTimeout(() => {
                    isTimedOut = true;

                    item.isCancel = true;
                    if (item.isUploading) {
                        iframe.unbind('load').prop('src', 'javascript:false;');
                        form.replaceWith(input);
                    }

                    var headers = {};
                    var response = "Request Timeout.";
                    this._onTimeoutItem(item);
                    this._onCompleteItem(item, response, 408, headers);
                }, timeout);
            }

            form[0].submit();
        }
The IFrame transport
@param {FileItem} item
@private