【问题标题】:Determine if selection is present确定是否存在选择
【发布时间】:2017-05-24 00:01:51
【问题描述】:

有没有一种(更好的)方法来确定 Photoshop 中的图层中是否存在选择,而无需在 selection.bounds 上使用 try/catch?

try
{
    var sel = app.activeDocument.selection.bounds;
}
catch(e)
{
    var sel = undefined;
    alert("No selection");
}

if (sel) alert(sel);

如果没有选择而不是返回(预期的)未定义边界,我只会收到错误 1302:没有这样的元素。因此需要 try/catch。

【问题讨论】:

  • 你不能使用if(app.activeDocument.selection){ var sel = app.activeDocument.selection.bounds;}之类的东西,如果选择是未定义/空的,那么它应该返回false。
  • @suvartheec 遗憾的是,没有。这就是您的代码刚刚提出的问题error 1302: No such element 这是一种鸡/蛋问题

标签: javascript undefined selection photoshop photoshop-script


【解决方案1】:

我也遇到了这个问题,虽然我没有找到使用 try..catch 的方法,但我只是在可以测试的 Selection 原型中添加了一个简单的 active() 函数。

Selection.prototype.active = function()
{
    try      { return (selection.bounds) ? true : false; }
    catch(e) { return false; }
}

这样,您只需拨打app.activeDocument.selection.active() 即可查看是否选择了某些内容。

try 部分中的三元运算符存在,以防他们将来修复 Selection.bounds 以报告未定义。

【讨论】:

    【解决方案2】:

    遗憾的是,原型不符合 Photoshop 的 EMCA 限制,所以我将它变成了一个函数:

    var mySelection = is_selection_active();
    alert(mySelection);
    
    function is_selection_active()
    {
      var layerRef = app.activeDocument.selection;
    
      try      { return (layerRef.bounds[0]) ? true : false; }
      catch(e) { return false; }
    }
    

    【讨论】:

      【解决方案3】:

      不幸的是,上面的函数是错误的,因为如果选择的左 x 坐标为 0,它将返回 false。这可以通过仅检查引用来纠正(即从边界中删除 [0])或在两个测试用例中都返回 true的三元表达式。一般来说,当涉及到 JavaScript 时,我倾向于后一种解决方案,但在这种特定情况下,我更喜欢通过删除索引的第一种方法,因为这是一个未记录的特性测试,而且这个测试还将涵盖 API 的未来变化,这可能将 bounds 设置为 null 表示没有选择处于活动状态。

      所以上面的函数就变成了:

      function selection_active()
      {
        var layerRef = app.activeDocument.selection;
      
        try      { return (layerRef.bounds) ? true : false; }
        catch(e) { return false; }
      }
      

      我个人已经调整了这个函数来接受一个可选的文档:

      function selectionActive(doc)
      {
        if(doc==null) doc=app.activeDocument;
      
        try      { return doc.selection.bounds ? true : true; }
        catch(e) { return false; }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-12
        • 1970-01-01
        • 1970-01-01
        • 2013-09-15
        • 2019-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多