| 
 | 
 
 楼主 |
发表于 2019-4-8 16:52:27
|
显示全部楼层
 
 
 
[ol][*]/* 
[*]Embedded SVG-edit API 
[*] 
[*]General usage: 
[*]- Have an iframe somewhere pointing to a version of svg-edit > r1000 
[*]- Initialize the magic with: 
[*]var svgCanvas = new EmbeddedSVGEdit(window.frames.svgedit); 
[*]- Pass functions in this format: 
[*]svgCanvas.setSvgString('string') 
[*]- Or if a callback is needed: 
[*]svgCanvas.setSvgString('string')(function(data, error){ 
[*]  if (error){ 
[*]    // There was an error 
[*]  } else{ 
[*]    // Handle data 
[*]  } 
[*]}) 
[*] 
[*]Everything is done with the same API as the real svg-edit, 
[*]and all documentation is unchanged. 
[*] 
[*]However, this file depends on the postMessage API which 
[*]can only support JSON-serializable arguments and 
[*]return values, so, for example, arguments whose value is 
[*]'undefined', a function, a non-finite number, or a built-in 
[*]object like Date(), RegExp(), etc. will most likely not behave 
[*]as expected. In such a case one may need to host 
[*]the SVG editor on the same domain and reference the 
[*]JavaScript methods on the frame itself. 
[*] 
[*]The only other difference is 
[*]when handling returns: the callback notation is used instead. 
[*] 
[*]var blah = new EmbeddedSVGEdit(window.frames.svgedit); 
[*]blah.clearSelection('woot', 'blah', 1337, [1, 2, 3, 4, 5, 'moo'], -42, {a: 'tree',b:6, c: 9})(function(){console.log('GET DATA',arguments)}) 
[*]*/ 
[*] 
[*](function () {'use strict'; 
[*] 
[*]var cbid = 0; 
[*] 
[*]function getCallbackSetter (d) { 
[*]  return function () { 
[*]    var t = this, // New callback 
[*]      args = [].slice.call(arguments), 
[*]      cbid = t.send(d, args, function(){});  // The callback (currently it's nothing, but will be set later) 
[*] 
[*]    return function(newcallback){ 
[*]      t.callbacks[cbid] = newcallback; // Set callback 
[*]    }; 
[*]  }; 
[*]} 
[*] 
[*]/* 
[*]* Having this separate from messageListener allows us to 
[*]* avoid using JSON parsing (and its limitations) in the case 
[*]* of same domain control 
[*]*/ 
[*]function addCallback (t, data) { 
[*]  var result = data.result || data.error, 
[*]        cbid = data.id; 
[*]  if (t.callbacks[cbid]) { 
[*]    if (data.result) { 
[*]      t.callbacks[cbid](result); 
[*]    } else { 
[*]      t.callbacks[cbid](result, 'error'); 
[*]    } 
[*]  } 
[*]} 
[*] 
[*]function messageListener (e) { 
[*]  // We accept and post strings as opposed to objects for the sake of IE9 support; this 
[*]  //   will most likely be changed in the future 
[*]  if (typeof e.data !== 'string') { 
[*]    return; 
[*]  } 
[*]  var allowedOrigins = this.allowedOrigins, 
[*]    data = e.data && JSON.parse(e.data); 
[*]  if (!data || typeof data !== 'object' || data.namespace !== 'svg-edit' || 
[*]      e.source !== this.frame.contentWindow || 
[*]      (allowedOrigins.indexOf('*') === -1 && allowedOrigins.indexOf(e.origin) === -1) 
[*]  ) { 
[*]    return; 
[*]  } 
[*]  addCallback(this, data); 
[*]} 
[*] 
[*]function getMessageListener (t) { 
[*]        return function (e) { 
[*]                messageListener.call(t, e); 
[*]        }; 
[*]} 
[*] 
[*]/** 
[*]* @param {HTMLIFrameElement} frame 
[*]* @param {array} [allowedOrigins=[]] Array of origins from which incoming 
[*]*     messages will be allowed when same origin is not used; defaults to none. 
[*]*     If supplied, it should probably be the same as svgEditor's allowedOrigins 
[*]*/ 
[*]function EmbeddedSVGEdit (frame, allowedOrigins) { 
[*]  if (!(this instanceof EmbeddedSVGEdit)) { // Allow invocation without 'new' keyword 
[*]    return new EmbeddedSVGEdit(frame); 
[*]  } 
[*]  this.allowedOrigins = allowedOrigins || []; 
[*]  // Initialize communication 
[*]  this.frame = frame; 
[*]  this.callbacks = {}; 
[*]  // List of functions extracted with this: 
[*]  // Run in firebug on http://svg-edit.googlecode.com/svn/trunk/docs/files/svgcanvas-js.html 
[*] 
[*]  // for (var i=0,q=[],f = document.querySelectorAll('div.CFunction h3.CTitle a'); i 复制代码 |   
 
 
 
 |