当前位置:  开发笔记 > 编程语言 > 正文

如何获取JavaScript调用者函数行号?如何获取JavaScript调用者源URL?

如何解决《如何获取JavaScript调用者函数行号?如何获取JavaScript调用者源URL?》经验,为你挑选了3个好方法。

我使用以下内容来获取JavaScript调用者函数名称:

var callerFunc = arguments.callee.caller.toString();
callerFuncName = (callerFunc.substring(callerFunc.indexOf("function") + 8, callerFunc.indexOf("(")) || "anoynmous")

有没有办法发现调用该方法的行号?

另外,有没有办法获取调用该方法的JavaScript文件的名称?还是源URL?



1> 小智..:

这适用于chrome/QtWebView

function getErrorObject(){
    try { throw Error('') } catch(err) { return err; }
}

var err = getErrorObject();
var caller_line = err.stack.split("\n")[4];
var index = caller_line.indexOf("at ");
var clean = caller_line.slice(index+2, caller_line.length);


不需要抛出错误; 简单地创建它就足够了:`var caller_line =(new Error).stack.split("\n")[4]`
将此建议与另一个类似的答案合并,以获得FF/Webkit"标准化"响应 - 请参阅http://stackoverflow.com/a/14841411/1037948

2> Eli Grey..:

kangax的解决方案引入了不必要的try..catch范围.如果您需要访问JavaScript中的某些行号(只要您使用的是Firefox或Opera),只需访问即可(new Error).lineNumber.


这是勾选,但不回答问题,即如何获取**调用函数**的行号.
嗨,谢谢你的插件.你知道它是否有可能从之前的电话号码获得行号?假设方法A调用B,现在在BI中想知道在A下的哪一行调用了?
而且,这是非常有限的.最好的解决方案是抛出错误并在error.stack上使用正则表达式,这在所有现代浏览器中都可用.您可以轻松提取该路径,文件,行和列.没问题.

3> Ryan..:

我很惊讶大多数这些答案都假设您想要处理错误而不仅仅是为正常情况输出有用的调试跟踪.

例如,我喜欢使用这样的console.log包装器:

consoleLog = function(msg) {//See /sf/ask/17360801/
    var e = new Error();
    if (!e.stack)
        try {
            // IE requires the Error to actually be thrown or else the 
            // Error's 'stack' property is undefined.
            throw e;
        } catch (e) {
            if (!e.stack) {
                //return 0; // IE < 10, likely
            }
        }
    var stack = e.stack.toString().split(/\r\n|\n/);
    if (msg === '') {
        msg = '""';
    }
    console.log(msg, '          [' + stack[1] + ']');        
}

这最终会将以下输出打印到我的控制台:

1462567104174 [getAllPosts@http://me.com/helper.js:362:9]

请参阅/sf/ask/17360801/以及具有正确行号的console.log的正确包装器?

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有