如何使用 extendscript 检查 属性 值是否只读?
How to check if a property value is readonly using extendscript?
我正在为 After Effects 编写一个脚本,该脚本从图层收集所有属性并将它们写入 XML 文件。当我从 XML 检索值时,
有些值是只读的,工具包会抛出错误。
有没有办法检查它,比如文件对象的只读属性?
即:layer.property().(只读||只读)
如果没有,有人可以告诉我我可以采取什么方法朝着正确的方向前进吗?
我认为您无法从 ESTK 中获取此信息。
您可以使用 'After Effects Scripting Guide Book' 检查并创建一个包含所有 'readonly' 属性的对象,然后检查该对象是否包含此 属性.
这里是 link 脚本指南:
After-Effects-CS6-Scripting-Guide
考虑到项目中的第一项是其中包含固体的合成,这可行,但可以说它很笨拙,您需要能够构建(每个)字符串才能执行此操作-- 但也许您已经准备好这样做了:
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;
}
}
但是,这里会出现一小部分蠕虫病毒,因为如果设置了“启用脚本调试器”选项,“false”s 将不起作用。所以你需要做一个变通方法来检查这个设置并临时重置它(参见 http://aenhancers.com/viewtopic.php?f=8&t=189&p=554&hilit=debugger#p554 )
只需尝试覆盖它,然后将其还原,如下所示:
function isReadOnly(value, container) {
var tmp = container[value];
var tmp2;
var coolString = "cool";
try {
container[value] = "cool";
} catch (e) {
return true
}
tmp2 = container[value];
container[value] = tmp;
return coolString != tmp2;
}
// true, navigator.platform is read only
console.log(isReadOnly("platform", navigator))
// false, window.parent is not read only
console.log(isReadOnly("parent", window))
我正在为 After Effects 编写一个脚本,该脚本从图层收集所有属性并将它们写入 XML 文件。当我从 XML 检索值时, 有些值是只读的,工具包会抛出错误。
有没有办法检查它,比如文件对象的只读属性? 即:layer.property().(只读||只读)
如果没有,有人可以告诉我我可以采取什么方法朝着正确的方向前进吗?
我认为您无法从 ESTK 中获取此信息。
您可以使用 'After Effects Scripting Guide Book' 检查并创建一个包含所有 'readonly' 属性的对象,然后检查该对象是否包含此 属性.
这里是 link 脚本指南: After-Effects-CS6-Scripting-Guide
考虑到项目中的第一项是其中包含固体的合成,这可行,但可以说它很笨拙,您需要能够构建(每个)字符串才能执行此操作-- 但也许您已经准备好这样做了:
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;
}
}
但是,这里会出现一小部分蠕虫病毒,因为如果设置了“启用脚本调试器”选项,“false”s 将不起作用。所以你需要做一个变通方法来检查这个设置并临时重置它(参见 http://aenhancers.com/viewtopic.php?f=8&t=189&p=554&hilit=debugger#p554 )
只需尝试覆盖它,然后将其还原,如下所示:
function isReadOnly(value, container) {
var tmp = container[value];
var tmp2;
var coolString = "cool";
try {
container[value] = "cool";
} catch (e) {
return true
}
tmp2 = container[value];
container[value] = tmp;
return coolString != tmp2;
}
// true, navigator.platform is read only
console.log(isReadOnly("platform", navigator))
// false, window.parent is not read only
console.log(isReadOnly("parent", window))