0

我正在尝试将一些新的聚合物自定义元素集成到我正在处理的项目中,其中一个要求是应用程序可以将视频上传到第三方服务(Wistia)。这个第三方服务提供了一个使用 flash 的上传小部件,但是带有聚合物的 platformJS polyfill 正在影响创建的 flash 对象并破坏小部件。我不是 Flash 开发人员,也不太了解浏览器中的 flash 是如何工作的,但是如果有人知道另一种方法来实例化 flash 对象,以便它可以与 platformjs polyfill 一起使用,或者有选择地排除polyfill 我真的很感激你的洞察力。

Flash 对象初始化代码(来自http://static.wistia.com/javascripts/upload_widget.js

容器元素 = 文档。

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]()

非常感谢您对此事的任何见解,谢谢

4

1 回答 1

1

正如您在上面的评论中注意到的那样,当本地未提供影子 dom 时,您使用查询选择器获得的元素将被包装,以填充影子 dom 的封装。这些包裹的元素不会暴露包裹对象上的所有内容。为了在有和没有原生 shadow dom 实现的浏览器中工作,试试这个:

var movieElement = unwrap(document.getElementById(FLASH_OBJECT_ELEMENT_ID));
movieElement[functionName]();
于 2014-07-18T22:02:22.427 回答