in shared/AppInsightsCommon/src/Telemetry/Exception.ts [136:185]
function _getStackFromErrorObj(errorObj:any): IStackDetails {
let details = null;
if (errorObj) {
try {
/* Using bracket notation is support older browsers (IE 7/8 -- dont remember the version) that throw when using dot
notation for undefined objects and we don't want to loose the error from being reported */
if (errorObj[strStack]) {
// Chrome/Firefox
details = _convertStackObj(errorObj[strStack]);
} else if (errorObj[strError] && errorObj[strError][strStack]) {
// Edge error event provides the stack and error object
details = _convertStackObj(errorObj[strError][strStack]);
} else if (errorObj["exception"] && errorObj.exception[strStack]) {
details = _convertStackObj(errorObj.exception[strStack]);
} else if (_isStackDetails(errorObj)) {
details = errorObj;
} else if (_isStackDetails(errorObj[strStackDetails])) {
details = errorObj[strStackDetails];
} else if (window && window["opera"] && errorObj[strMessage]) {
// Opera
details = _getOperaStack(errorObj.message);
} else if (isString(errorObj)) {
details = _convertStackObj(errorObj);
} else {
let evtMessage = errorObj[strMessage] || errorObj[strDescription] || "";
if (isString(errorObj[strErrorSrc])) {
if (evtMessage) {
evtMessage += "\n";
}
evtMessage += " from " + errorObj[strErrorSrc];
}
if (evtMessage) {
details = _convertStackObj(evtMessage);
}
}
} catch (e) {
// something unexpected happened so to avoid failing to report any error lets swallow the exception
// and fallback to the callee/caller method
details = _convertStackObj(e);
}
}
return details || {
src: "",
obj: null
};
}