在IE11中,Jquery appendTo和append不起作用

时间:2017-12-07 18:29:05

标签: javascript jquery

这是pastehandler.js

$(function () {
    $('div.popp_dialog').each(function (i, el) {

        var paste = (new $.paste()).appendTo(el).on('pasteImage', function (ev, data) {
            var dataUrl = getBase64Image(data.dataURL);
            var imageType = "image/jpeg";
            if (data.dataURL.indexOf("image/png") > 0)
                imageType = "image/png";
            opener.uploadFileOnPaste(dataUrl, imageType);
            // closeWindow();
            window.close();
        })
            .on('pasteText', function (ev, data) {
                alert("Pasted content is not valid. Please paste image content.");
            });
        $(el).click(function () {
            $(paste).focus();
        });
        if (i == 0) {
            paste.focus();
        }
    });

});//]]>  

这是我的paste.js文件

(function() {
  var $, getImageData, readImagesFromEditable;

  $ = jQuery;

  readImagesFromEditable = function(element, cb) {
    return setTimeout((function() {
      return $(element).find('img').each(function(i, img) {
        return getImageData(img.src, cb);
      });
    }), 1);
  };

  getImageData = function(src, cb) {
    var loader;
    loader = new Image();
    loader.onload = function() {
      var canvas, ctx, dataURL;
      canvas = document.createElement('canvas');
      canvas.width = loader.width;
      canvas.height = loader.height;
      ctx = canvas.getContext('2d');
      ctx.drawImage(loader, 0, 0, canvas.width, canvas.height);
      dataURL = null;
      try {
        dataURL = canvas.toDataURL('image/png');
      } catch (_error) {

      }
      if (dataURL) {
        return cb({
          dataURL: dataURL,
          width: loader.width,
          height: loader.height
        });
      }
    };
    return loader.src = src;
  };

  $.paste = function() {
    var div;
    div = document.createElement('div');
    div.contentEditable = true;
    $(div).css({
      width: 1,
      height: 1,
      position: 'fixed',
      left: -100,
      overflow: 'hidden'
    }).on('paste', function(ev) {
      var clipboardData, item, reader, text, _i, _len, _ref, _ref1, _ref2, _ref3,
        _this = this;
      if (((_ref = ev.originalEvent) != null ? _ref.clipboardData : void 0) != null) {
        clipboardData = ev.originalEvent.clipboardData;
        if (clipboardData.items) {
          _ref1 = clipboardData.items;
          for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
            item = _ref1[_i];
            if (item.type.match(/^image\//)) {
              reader = new FileReader();
              reader.onload = function(event) {
                return getImageData(event.target.result, function(data) {
                  return $(div).trigger('pasteImage', data);
                });
              };
              reader.readAsDataURL(item.getAsFile());
            }
            if (item.type === 'text/plain') {
              item.getAsString(function(string) {
                return $(div).trigger('pasteText', {
                  text: string
                });
              });
            }
          }
        } else {
          if (clipboardData.types.length) {
            if ((_ref2 = (text = clipboardData.getData('Text'))) != null ? _ref2.length : void 0) {
              $(div).trigger('pasteText', {
                text: text
              });
            }
          } else {
            readImagesFromEditable(div, function(data) {
              return $(div).trigger('pasteImage', data);
            });
          }
        }
      }
      if (clipboardData = window.clipboardData) {
        if ((_ref3 = (text = clipboardData.getData('Text'))) != null ? _ref3.length : void 0) {
          $(div).trigger('pasteText', {
            text: text
          });
        } else {
          readImagesFromEditable(div, function(data) {
            return $(div).trigger('pasteImage', data);
          });
        }
      }
      return setTimeout((function() {
        return $(div).html('');
      }), 2);
    });
    return $(div);
  };

}).call(this);

基本上这个Paste.js和pastehandler.js是子窗口脚本。 我的代码在除IE11之外的所有浏览器上都能正常工作。我认为appendTo会导致问题。 我试过了与(new $.paste()).empty().append(el) $(el).append(new $.paste())不同的方式 既没有奏效。我认为它需要一些丑陋的代码才能使听众正确。 有人可以帮帮我吗在此先感谢。

0 个答案:

没有答案