无需嵌入即可在 Flash 和 JavaScript 之间进行通信
It is possible to Communicate Between Flash and JavaScript without embedding
我发现这个很酷的 file-upload repo by mailru,它叫做 FileAPI。 FileAPI 使用 .swf 文件作为调试工具。在不嵌入 .swf 文件的情况下如何工作?
他们可以使用文件 API。不要将它与 Mail.ru 库的名称混淆。请参阅此链接:
https://developer.mozilla.org/en/docs/Web/API/File
https://developer.mozilla.org/ru/docs/Web/API/XMLHttpRequest#sendAsBinary()
How this works without embedding the .swf file??
他们似乎在动态更新 html 页面(现在嵌入了 SWF)。这意味着使用 innerHTML
生成新内容,这些内容最初是 而不是 在 html 文件中编码的。您可以在此处查看基本指南 about innerHTML。
查看 FileAPI.js, onwards from line 3590 我们发现他们确实使用 innerHTML
来嵌入 Flash 对象。当触发右 Javascript 函数时,它会(动态地)嵌入。
他们的代码的一些简短片段如下:
/**
* Publish flash-object
*
* @param {HTMLElement} el
* @param {String} id
* @param {Object} [opts]
*/
publish: function (el, id, opts){
opts = opts || {};
el.innerHTML = _makeFlashHTML({
id: id
, src: _getUrl(api.flashUrl, 'r=' + api.version)
//, src: _getUrl('http://v.demidov.boom.corp.mail.ru/uploaderfileapi/FlashFileAPI.swf?1')
, wmode: opts.camera ? '' : 'transparent'
, flashvars: 'callback=' + (opts.onEvent || 'FileAPI.Flash.onEvent')
+ '&flashId='+ id
+ '&storeKey='+ navigator.userAgent.match(/\d/ig).join('') +'_'+ api.version
+ (flash.isReady || (api.pingUrl ? '&ping='+api.pingUrl : ''))
+ '&timeout='+api.flashAbortTimeout
+ (opts.camera ? '&useCamera=' + _getUrl(api.flashWebcamUrl) : '')
+ '&debug='+(api.debug?"1":"")
}, opts);
},
... etc etc etc ...
我发现这个很酷的 file-upload repo by mailru,它叫做 FileAPI。 FileAPI 使用 .swf 文件作为调试工具。在不嵌入 .swf 文件的情况下如何工作?
他们可以使用文件 API。不要将它与 Mail.ru 库的名称混淆。请参阅此链接: https://developer.mozilla.org/en/docs/Web/API/File https://developer.mozilla.org/ru/docs/Web/API/XMLHttpRequest#sendAsBinary()
How this works without embedding the .swf file??
他们似乎在动态更新 html 页面(现在嵌入了 SWF)。这意味着使用 innerHTML
生成新内容,这些内容最初是 而不是 在 html 文件中编码的。您可以在此处查看基本指南 about innerHTML。
查看 FileAPI.js, onwards from line 3590 我们发现他们确实使用 innerHTML
来嵌入 Flash 对象。当触发右 Javascript 函数时,它会(动态地)嵌入。
他们的代码的一些简短片段如下:
/**
* Publish flash-object
*
* @param {HTMLElement} el
* @param {String} id
* @param {Object} [opts]
*/
publish: function (el, id, opts){
opts = opts || {};
el.innerHTML = _makeFlashHTML({
id: id
, src: _getUrl(api.flashUrl, 'r=' + api.version)
//, src: _getUrl('http://v.demidov.boom.corp.mail.ru/uploaderfileapi/FlashFileAPI.swf?1')
, wmode: opts.camera ? '' : 'transparent'
, flashvars: 'callback=' + (opts.onEvent || 'FileAPI.Flash.onEvent')
+ '&flashId='+ id
+ '&storeKey='+ navigator.userAgent.match(/\d/ig).join('') +'_'+ api.version
+ (flash.isReady || (api.pingUrl ? '&ping='+api.pingUrl : ''))
+ '&timeout='+api.flashAbortTimeout
+ (opts.camera ? '&useCamera=' + _getUrl(api.flashWebcamUrl) : '')
+ '&debug='+(api.debug?"1":"")
}, opts);
},
... etc etc etc ...