javascript 确定是否选择了文本框架本身、文本框架内的文本或未选择文本框架或文本部分

w6mmgewl  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(85)

一些背景

我们在Adobe Illustrator CC 2022中使用产品标签设计。此脚本的目的是根据用户选择将我们的公制值转换为英制值:ML到FL OZ或G到OZ。数学/转换部分工作正常。

我需要什么指引

  • 我需要确定用户是否有:*

1.选择文本框架本身。
1.用户是否将光标置于文本框架内或是否选择了文本的一部分。
1.以上两种情况是否都不是。
所包含的代码片段确实适用于上面的1和2,但列表中的3号我似乎无法正确处理。它似乎完全忽略了嵌套的“Catch”。我对Try/Catch块不是很熟悉,尝试过if/then语句,但没有成功。
有没有办法让脚本忽略嵌套的catch或者,有没有其他的解决办法?
有问题的代码片段(为了便于参考,我已经包括了注解):

if (app.documents.length > 0)
{
    var $docRef = app.activeDocument;
    var $rslt = "I am the replacement value";
    try
    {
        //check if the selected object is a "Text Frame"
        
        if($docRef.selection[0].typename == "TextFrame")
        {
            $docRef.selection[0].contents = $rslt;
        }
    }
    catch(e1)
    {
        alert("e1 :"+e1.message); // "e1: undefined is not an object"
        
        //DO THE FOLLOWING: Ignore the error and try the nested check
        
        try
        {
            //check if the parent object of selected is a "Story"... thus editable text within a Text Frame
            
            if($docRef.selection.parent.typename == "Story")
            {
                $docRef.selection.contents = $rslt;
            }
        }
        catch(e2)
        {
            alert("e2 :"+e2.message);  // "e2: undefined is not an object"
            
            //DO THE FOLLOWING: Assume that no ediatble text is selected, create a Text Frame and populate it with $rslt value

            alert("Creating new Text Frame");
            
            //MY PROBLEM: It ignores this Catch step completely...
        }
    }
}
bnl4lu3b

bnl4lu3b1#

它可能是这样的:

var sel = app.selection;
if (sel.typename == undefined) sel = sel[0];
try { sel.contents = "I am the replacement value" } catch(e) {}

或者:

var sel = app.activeDocument.selection;

if (sel.length > 0) {
    if (sel.typename == undefined) sel = sel[0];

    if (sel.typename == 'TextFrame' || sel.typename == 'TextRange') {
        sel.contents = 'I am the replacement value';
    } else {
        alert('Creating a new text frame')
    }

} else alert('Nothing is selected');

相关问题