我正在尝试将一些新的 polymer 自定义元素集成到我正在开发的项目中,其中一个要求是该应用程序可以将视频上传到第三方服务(Wistia)。该第三方服务提供了一个使用 flash 的上传小部件,但 polymer 提供的 platformJS polyfill 正在影响创建的 flash 对象并破坏该小部件。我不是 Flash 开发人员,也不了解浏览器中的 Flash 是如何工作的,但如果有人知道另一种实例化 Flash 对象的方法,以便它可以与 platformjs polyfill 一起使用,或者有选择地排除我真的很感激你的见解。
Flash 对象初始化代码(来自 http://static.wistia.com/javascripts/upload_widget.js)
containerElement = 文档。
getElementById(this.settings.flash_container_id);
containerElement.innerHTML =
['<object id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.flash_width, '" height="', this.settings.flash_height, '" style="-moz-user-focus: ignore;">',
'<param name="movie" value="', this.settings.flash_url, '" />',
'<param name="bgcolor" value="', this.settings.flash_color, '" />',
'<param name="quality" value="high" />',
'<param name="menu" value="false" />',
'<param name="wmode" value="', this.settings.flash_wmode ,'" />',
'<param name="allowScriptAccess" value="always" />',
'<param name="flashvars" value="' + this.getFlashVars() + '" />',
'</object>'].join("");
现在的问题是,当像这样实例化对象而没有使用 platformjs polyfill 时,可以像这样调用 flash 函数
var movieElement = document.getElementById(FLASH_OBJECT_ELEMENT_ID);
movieElement[functionName]()
对此事的任何见解将不胜感激, 谢谢
最佳答案
正如您在上面的评论中注意到的,当本地未提供影子 dom 时,您通过查询选择器获得的元素为 wrapped为了对shadow dom进行polyfill封装。这些包装的元素不会暴露包装对象上的所有内容。为了在具有和不具有 native Shadow dom 实现的浏览器中工作,请尝试以下操作:
var movieElement = unwrap(document.getElementById(FLASH_OBJECT_ELEMENT_ID));
movieElement[functionName]();
关于javascript - Polymer JS Polyfill 和 flash 兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24830022/