如何使用extendscript检查属性值是否只读?

时间:2015-08-02 13:01:50

标签: javascript extendscript after-effects

我正在为After Effects编写一个脚本,该脚本从图层收集所有属性并将其写入XML文件。当我从XML中检索值时, 有些值是readOnly,工具包会抛出错误。

有没有办法检查它,比如File对象的readonly属性? 即:layer.property()。(readonly || readOnly)

如果没有,有人可以告诉我,我可以采取哪些方法朝着正确的方向前进?

3 个答案:

答案 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;
}