Search code examples
javascriptextendscriptafter-effects

How to check if a property value is readonly using extendscript?


I'm writing a script for After Effects that collects all properties from a layer and write them into an XML file. When I retrieve the values from the XML, some values are readOnly and the toolkit throws an error.

Is there any way to check it, like readonly attribute of File object? ie: layer.property().(readonly||readOnly)

If not, someone can tell me wich aproach can I take to go in the right direction?


Solution

  • Given that the first item in the project is a comp with a solid in it, this works but it is arguably kludgey, and you'd need to be able to build the (each) string in order to do this -- but maybe you are already set up to do that:

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

    However, there is a small can of worms opening up here, in that "false"s will not work if the "Enable Script Debugger" option is set. So you need to do a workaround in order to check for this setting and temporarily reset it (see http://aenhancers.com/viewtopic.php?f=8&t=189&p=554&hilit=debugger#p554 )