- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建 AIR 桌面应用程序。在某一时刻,应用程序加载一个弹出窗口(基于 s:Window 的 MXML 组件),其中包含 mx:HTML加载本地(在应用程序目录中)html 文件 blank.html 的组件。 blank.html 中的相关元素是:
<script src="jw/jwplayer.js"/> <!--JW Player's JS-based Embedder-->
...
<div id="jwtarget" /> <!-- the target that the embedder will use -->
由于我要使用的参数是在运行时确定的,因此我使用 domWindow 属性来调用加载播放器的方法。这是一个有效的示例:
private function injectPlayer():void {
var playerVars:Object = {};
playerVars.flashplayer = "jw/player.swf";
playerVars.file = "http://www.archive.org/download/meet_john_doe_ipod/meet_john_doe_512kb.mp4";
playerVars.height = 360;
playerVars.width = 640;
try { // attempt to invoke the js function
htmlComponent.domWindow.jwplayer("jwtarget").setup(playerVars);
} catch(e:Error) {}
}
当页面完成加载时调用:
<mx:HTML id="htmlComponent" location="assets/blank.html" complete="injectPlayer()" />
一切正常。
现在回答问题。我需要能够将更复杂的 playerVars
对象传递给函数,但我似乎没有得到正确的语法。这是我一直在尝试的最简单的示例:
private function injectPlayer():void {
var playerVars:Object = {};
//playerVars.flashplayer = "jw/player.swf";
playerVars.file = "http://www.archive.org/download/meet_john_doe_ipod/meet_john_doe_512kb.mp4";
playerVars.height = 360;
playerVars.width = 640;
playerVars.modes = [{"type":"flash","src":"jw/player.swf"}];
try { // attempt to invoke the js function
htmlComponent.domWindow.jwplayer("jwtarget").setup(playerVars);
} catch(e:Error) {}
}
这段代码应该创建与上面代码完全相同的东西,但是它无法执行。我假设我需要以某种方式更改语法,以允许对象数组(模式
)作为参数正确传递给 js 函数。
我尝试过各种方法,例如将 modes
作为字符串传递,或者首先将整个内容通过 JSON.stringify()
,但没有效果。有人知道为参数构造复杂对象的正确方法吗?
其他详细信息,如果您现在还没有推断出它们:Flex 4.5.1 是我正在构建的 SDK,包括 AIR 3.0 扩展(这意味着面向 FP11)。
更新:
我尝试过的另一个配置,它确实有效:
playerVars.modes = {"type":"flash", "src":"jw/player.swf"};
但是,这仍然不能解决我应该能够在 modes
属性中传递对象数组的问题。但至少这样可以加载视频播放器。
更多更新:
因此,我从 jwplayer.js 中发现了这一小段代码,我怀疑播放器加载失败:
if (typeof parsedConfig.modes == "string") {
_modes = _playerDefaults();
_modes[0].src = parsedConfig.modes;
} else if (parsedConfig.modes instanceof Array) { // I suspect this was eval'd as false
_modes = parsedConfig.modes;
} else if (typeof parsedConfig.modes == "object" && parsedConfig.modes.type) {
_modes = [parsedConfig.modes];
}
为了测试我的怀疑,我将以下函数添加到我的 blank.html 中:
<script type="text/javascript">
var instanceOfArrayTest = function(arr) {
return arr instanceof Array;
}
</script>
在我的 ActionScript 代码中尝试了以下操作:
trace([1,2,3] is Array); // true
trace(htmlComponent.domWindow.instanceOfArrayTest([1,2,3])); // false!!!!
所以,问题似乎在于 ActionScript 没有将 AS3 数组对象作为 JS 数组对象传递!
最佳答案
尝试这样做:
playerVars.modes = [{type:"flash",src:"jw/player.swf"}];
关于javascript - 参数中带有复杂对象的 AS3 JS 函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7800214/
我是一名优秀的程序员,十分优秀!