<!DOCTYPE html> <!-- /* * jQuery File Upload Plugin postMessage API * https://github.com/blueimp/jQuery-File-Upload * * Copyright 2011, Sebastian Tschan * https://blueimp.net * * Licensed under the MIT license: * https://opensource.org/licenses/MIT */ --> <html lang="en"> <head> <meta charset="utf-8" /> <title>jQuery File Upload Plugin postMessage API</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous" ></script> </head> <body> <script> 'use strict'; var origin = /^https:\/\/example.org/, target = new RegExp('^(http(s)?:)?\\/\\/' + location.host + '\\/'); $(window).on('message', function (e) { e = e.originalEvent; var s = e.data, xhr = $.ajaxSettings.xhr(), f; if (!origin.test(e.origin)) { throw new Error('Origin "' + e.origin + '" does not match ' + origin); } if (!target.test(e.data.url)) { throw new Error( 'Target "' + e.data.url + '" does not match ' + target ); } $(xhr.upload).on('progress', function (ev) { ev = ev.originalEvent; e.source.postMessage( { id: s.id, type: ev.type, timeStamp: ev.timeStamp, lengthComputable: ev.lengthComputable, loaded: ev.loaded, total: ev.total }, e.origin ); }); s.xhr = function () { return xhr; }; if (!(s.data instanceof Blob)) { f = new FormData(); $.each(s.data, function (i, v) { f.append(v.name, v.value); }); s.data = f; } $.ajax(s).always(function (result, statusText, jqXHR) { if (!jqXHR.done) { jqXHR = result; result = null; } e.source.postMessage( { id: s.id, status: jqXHR.status, statusText: statusText, result: result, headers: jqXHR.getAllResponseHeaders() }, e.origin ); }); }); </script> </body> </html>