是否可以在代码中访问 google chrome 开发者工具在使用控制台登录函数时显示的 ["[[FunctionLocation]]"]
属性?
最佳答案
目前的答案是否。
您在 Inspector 中看到的 [[FunctionLocation]]
属性已添加到 V8Debugger::internalProperties()
中在调试器的 C++ 代码中,它使用另一个 C++ 函数 V8Debugger::functionLocation()
收集有关该功能的信息。然后 functionLocation()
使用许多特定于 V8 的 C++ API,例如 v8::Function::GetScriptLineNumber()
and GetScriptColumnNumber()
找出确切的信息。
上述所有 API 仅供 C++ 代码使用,而非 JavaScript 代码。换句话说,网页上的 JavaScript 代码无法直接访问此信息。
<小时/>但是,您也许可以使用 Chrome 扩展程序访问这些属性。最近,Chrome 使用的 V8 JavaScript 引擎添加了通过 Chrome DevTools Protocol 访问这些属性的支持。 。特别是可以通过 Runtime.getProperties
获取内部属性称呼。此外,它 seems like Chrome 扩展程序可能能够通过 chrome.debugger
与 DevTools 协议(protocol)进行交互.
在 Node.js 中使用 DevTools 协议(protocol)的概念证明,它可以使用 Inspector 直接访问该协议(protocol)。内置模块(穆罕默德在他们的回答中提到):
global.a = () => { /* test function */ };
const s = new (require('inspector').Session)();
s.connect();
let objectId;
s.post('Runtime.evaluate', { expression: 'a' }, (err, { result }) => {
objectId = result.objectId;
});
s.post('Runtime.getProperties', { objectId }, (err, { internalProperties }) => {
console.log(internalProperties);
});
产量
[
{
name: '[[FunctionLocation]]',
value: {
type: 'object',
subtype: 'internal#location',
value: [Object],
description: 'Object'
}
},
{
name: '[[Scopes]]',
value: {
type: 'object',
subtype: 'internal#scopeList',
className: 'Array',
description: 'Scopes[2]',
objectId: '{"injectedScriptId":1,"id":24}'
}
}
]
使用 Node.js v12.3.1。
关于javascript - 以编程方式访问函数位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41146373/