gpt4 book ai didi

javascript - 参数中带有复杂对象的 AS3 JS 函数调用

转载 作者:行者123 更新时间:2023-11-28 21:15:09 26 4
gpt4 key购买 nike

我正在构建 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com