繁体   English   中英

在JavaScript中执行EventListener时发生动作脚本错误

[英]Actionscript error when executing eventlistener in javascript

我有以下代码使用actionscript和indesign sdk:

在我的课开始时

 [ Embed (source= "resources/js/eventHandlers.jsx" , mimeType= "application/octet-stream" )]
        private static var jsHandler:Class;
        var  jsxInterface:HostObject = HostObject.getRoot(HostObject.extensions[0]);

在我的职能:

        jsxInterface.eval( new jsHandler().toString());
        jsxInterface.init( this );     
        document.xmlElements.item(0).xmlElements.item("docpreset").importXML(File.applicationStorageDirectory.resolvePath("temp/cstyles.xml"));
        jsxInterface.afterImport(document);

这是eventHandlers.jsx中的代码:

var asInterface = {};
function init(wrapper) {
  asInterface = wrapper;
} 


function afterImport(document) {
    document.addEventListener (Document.AFTER_IMPORT, asInterface.test());
}

并且从javascript我称之为:

public function test():void {
            trace("ole");
        }

现在,测试函数可以正确执行,但是在此之后,下一个被调用的函数再次是:

jsxInterface.afterImport(document);

然后抛出一个错误:

Error: ActionScript error: Error: Missing required parameter 'handler' for method 'addEventListener'.

我已经不知道该做什么。 我只想导入xml,并在导入完成后调度一个事件。

我不知道为什么我什至必须调用javascript函数,并且无法在普通的eventListener中使用document.AFTER_IMPORT。 谁能帮我解决这个问题?

问题似乎是在afterImport()方法中,您错误地添加了事件侦听器。

addEventListener()方法的第二个参数应该是函数的名称 (从技术上讲,它是对函数的引用)。 在代码中,您在函数名称的末尾加上了括号-因此,正在执行该函数,而不是提供对该函数的引用。

当函数执行时,它不返回任何内容,因此缺少addEventListener()的第二个参数,您会收到错误消息。

尝试以下方法:

function afterImport(document) {
    document.addEventListener (Document.AFTER_IMPORT, asInterface.test);
    //                                           notice no "()" here  ^^
}

[编辑]

由于仍然出现错误,因此您可能需要添加一些代码以进一步调试它。

在上面的方法中,注释掉addEventListener行,并替换为以下内容:

    // for debugging
    if (asInterface.test == null)
    {
        trace("fail: it's null");
    }
    else if (asInterface.test is Function)
    {
        trace("success: it's a function");
        // this is the only code path where your error will not occur
    }
    else
    {
        trace("fail: i don't know what this is: ", asInterface.test);
    }

我认为您必须像这样启动AS包装器:

jsxInterface.init( this );

那么AS API便可用于js代码。

洛伊奇

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM