我正在使用Adobe Flash Builder 4.6中的InDesign CS6扩展。由于某种原因,我的代码(工作很长时间)现在会抛出错误null is not an object
。该错误是位于JavaScript注入(最后一行):在ActionScript中调试JavaScript注入(Flash Builder)
public class Script {
private static var _instance:Script;
[ Embed (source="script.jsx", mimeType="application/octet-stream") ]
private var ScriptClass:Class;
private var jsxInterface:HostObject;
public function Script() {
if (Script._instance) {
throw new Error("only single instance allowed");
}
Script._instance = this;
this.init();
}
public static function getInstance():Script {
return _instance;
}
private function init():void {
Log.log("HostObject.mainExtension: "+HostObject.mainExtension);
for each (var s:String in HostObject.extensions) {
Log.log("Extension: "+s);
}
this.jsxInterface = HostObject.getRoot(HostObject.mainExtension);
this.jsxInterface.eval(new ScriptClass().toString());
}
public function getScript(name:String):Object {
return this.jsxInterface[name];
}
public function exec(name:String, args:Array = null):Object {
return InDesign.app.doScript(
this.jsxInterface[name], ScriptLanguage.javascript, args, UndoModes.AUTO_UNDO); // <-- this is where the error appears
}
心中已经检查InDesign.app.doScript的参数为空,但一切正常。这是被调用的函数(内部script.jsx):
function prepareForImageExport(params) {
var pageItem = params[0];
var prefix = params[1];
var bounds = params[2];
var ax = params[3];
var ay = params[4];
pageItem.visible = true;
// create tmp container
var container = app.activeDocument.rectangles.add(app.activeDocument.activeLayer);
container.name = prefix+container.id;
container.geometricBounds = bounds;
container.strokeWeight = 0;
container.strokeColor = app.activeDocument.swatches.item("None");
container.fillColor = app.activeDocument.swatches.item("None");
container.visible = true;
container.transparencySettings.blendingSettings.opacity = 100;
// create a duplicate of the pageItem in the tmp container
var copyItem = pageItem.duplicate(app.activeDocument.activeLayer);
copyItem.transparencySettings.blendingSettings.opacity = 100;
copyItem.locked = false;
container.geometricBounds = bounds;
container.move([ax,ay]);
copyItem.visible = true;
app.select(copyItem);
app.cut();
app.select(container);
app.pasteInto();
app.scriptArgs.setValue("container", container.name);
}
在这个地方我卡住了。我不知道该错误出现在哪一行。
我对ActionScript很新,我似乎无法找到关于如何在ActionScript中调试Javascript注入的文档。此外,我不知道,哪些变量(如应用程序)可以在JavaScript代码中访问,哪些(如控制台 - 我不能写console.log)不是。
任何帮助,非常感谢!
我已经检查过null。 HtmlLoader没有工作,我重写了Actionscript中的JavaScript代码。 –