Check and see which option suits you
//////////// option 1
var r = new ActionReference();
r.putProperty(stringIDToTypeID("property"), stringIDToTypeID("bounds"));
r.putEnumerated(stringIDToTypeID("layer"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
var b = executeActionGet(r).getObjectValue(stringIDToTypeID("bounds"));
var bounds =
[
b.getUnitDoubleValue(stringIDToTypeID("top")),
b.getUnitDoubleValue(stringIDToTypeID("left")),
b.getUnitDoubleValue(stringIDToTypeID("right")),
b.getUnitDoubleValue(stringIDToTypeID("bottom"))
];
alert(bounds, "opt 1")
//////////// option 2
var r = new ActionReference();
r.putProperty(stringIDToTypeID("property"), stringIDToTypeID("framedGroup"));
r.putEnumerated(stringIDToTypeID("layer"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
var b = executeActionGet(r).getObjectValue(stringIDToTypeID("framedGroup")).getObjectValue(stringIDToTypeID("framedGroupRect"));
var bounds =
[
b.getUnitDoubleValue(stringIDToTypeID("top")),
b.getUnitDoubleValue(stringIDToTypeID("left")),
b.getUnitDoubleValue(stringIDToTypeID("right")),
b.getUnitDoubleValue(stringIDToTypeID("bottom"))
];
alert(bounds, "opt 2")
//////////// option 3 & 4
var d = new ActionDescriptor();
var r = new ActionReference();
r.putProperty(stringIDToTypeID("property"), stringIDToTypeID("json"));
r.putEnumerated(stringIDToTypeID("document"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
d.putReference(stringIDToTypeID("null"), r);
d.putBoolean(stringIDToTypeID("imageInfo"), false);
d.putBoolean(stringIDToTypeID( "includeAncestors" ), false);
d.putInteger(stringIDToTypeID("layerID"), app.activeDocument.activeLayer.id);
eval("var o="+executeAction(stringIDToTypeID("get"), d, DialogModes.NO).getString(stringIDToTypeID("json")));
// option 3
var bounds =
[
o.layers[0].path.bounds.top,
o.layers[0].path.bounds.left,
o.layers[0].path.bounds.right,
o.layers[0].path.bounds.bottom,
];
alert(bounds, "opt 3");
// option 4
var bounds =
[
o.layers[0].path.pathComponents[0].origin.bounds.top,
o.layers[0].path.pathComponents[0].origin.bounds.left,
o.layers[0].path.pathComponents[0].origin.bounds.right,
o.layers[0].path.pathComponents[0].origin.bounds.bottom,
];
alert(bounds, "opt 4");
UPD.
Works for the active layer. For an arbitrary layer, it requires modification.