2 * jQuery postMessage Transport Plugin 1.1
3 * https://github.com/blueimp/jQuery-File-Upload
5 * Copyright 2011, Sebastian Tschan
8 * Licensed under the MIT license:
9 * http://www.opensource.org/licenses/MIT
12 /*jslint unparam: true, nomen: true */
13 /*global define, window, document */
17 if (typeof define === 'function' && define.amd) {
18 // Register as an anonymous AMD module:
19 define(['jquery'], factory);
22 factory(window.jQuery);
47 convert = function (p) {
53 'postmessage text': convert,
54 'postmessage json': convert,
55 'postmessage html': convert
59 $.ajaxTransport('postmessage', function (options) {
60 if (options.postMessage && window.postMessage) {
62 loc = $('<a>').prop('href', options.postMessage)[0],
63 target = loc.protocol + '//' + loc.host,
64 xhrUpload = options.xhr().upload;
66 send: function (_, completeCallback) {
68 id: 'postmessage-transport-' + (counter += 1)
70 eventName = 'message.' + message.id;
72 '<iframe style="display:none;" src="' +
73 options.postMessage + '" name="' +
74 message.id + '"></iframe>'
75 ).bind('load', function () {
76 $.each(names, function (i, name) {
77 message[name] = options[name];
79 message.dataType = message.dataType.replace('postmessage ', '');
80 $(window).bind(eventName, function (e) {
84 if (e.origin === target && data.id === message.id) {
85 if (data.type === 'progress') {
86 ev = document.createEvent('Event');
87 ev.initEvent(data.type, false, true);
89 xhrUpload.dispatchEvent(ev);
94 {postmessage: data.result},
98 $(window).unbind(eventName);
102 iframe[0].contentWindow.postMessage(
106 }).appendTo(document.body);