我正在为After Effects编写一个脚本,该脚本从图层收集所有属性并将其写入XML文件。当我从XML中检索值时, 有些值是readOnly,工具包会抛出错误。
有没有办法检查它,比如File对象的readonly属性? 即:layer.property()。(readonly || readOnly)
如果没有,有人可以告诉我,我可以采取哪些方法朝着正确的方向前进?
答案 0 :(得分:3)
鉴于项目中的第一项是一个具有实体的comp,这可行,但它可以说是kludgey,你需要能够构建(每个)字符串才能做到这一点 - 但也许你已经准备好了:
var r;
r = testForReadability("app.project.items[1].layers[1].enabled");
alert(r);
r = testForReadability("app.project.items[1].layers[1].width");//a solid's width is NOT writable
alert(r);
function testForReadability(thisProperty) {
var x;
try {
x = eval(thisProperty);
eval(thisProperty + " = x;");
return true;
} catch(e) {
return false;
}
}
但是,这里有一小群蠕虫可以打开,因为如果设置了“启用脚本调试器”选项,“假”将无效。因此,您需要执行一种解决方法以检查此设置并暂时将其重置(请参阅http://aenhancers.com/viewtopic.php?f=8&t=189&p=554&hilit=debugger#p554)
答案 1 :(得分:2)
我认为您无法从ESTK获取此信息。
您可以使用' After Effects脚本指南手册'检查并创建一个包含所有' readonly'属性,然后检查对象是否包含此属性。
这是脚本指南的链接: After-Effects-CS6-Scripting-Guide
答案 2 :(得分:0)
尝试覆盖它,然后将其还原,如下所示:
isReadOnly("platform", navigator) // true, navigator.platform is read only
isReadOnly("parent", window) // false, window.parent is not read only
function isReadOnly(value, container){
var tmp = container[value];
var tmp2;
var coolString = "cool";
container[value] = "cool";
tmp2 = container[value];
container[value] = tmp;
return coolString != tmp2;
}