【发布时间】:2015-07-24 09:53:23
【问题描述】:
我正在开发 Adobe Flash Builder 4.6 中的 InDesign CS6 扩展。出于某种原因,我的代码(长时间运行良好)现在抛出错误null is not an object。错误位于 javascript 注入中(最后一行):
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 的参数是否为 null,但一切正常。这是正在调用的函数(在 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);
}
在这个地方我被困住了。我不知道错误出现在 javascript 的哪一行。
我对 ActionScript 很陌生,似乎找不到有关如何在 ActionScript 中调试 Javascript 注入的文档。另外我真的不知道,哪些变量(如 app)可在 javascript 代码中访问,哪些变量(如控制台 - 我无法编写 console.log)不可访问。
非常感谢任何帮助!
【问题讨论】:
标签: javascript actionscript-3 actionscript flash-builder