如何知道从控制台调用JavaScript函数的时间?

时间:2015-10-11 23:10:37

标签: javascript console google-chrome-devtools console.log firefox-developer-tools

我希望特定的JavaScript函数的行为不同,具体取决于它是在HTML页面引用的JavaScript代码中调用还是在控制台中调用。这可能吗?如下所示:

function mySpecialFunc() {
  if (inConsole())
    console.log("You called me from the console!");
  else
    console.log("You called me from an HTML page or a JavaScript file linked from an HTML page, I think.");
}

是否存在与上述inConsole()函数等效的内容?

这至少只是Chrome专门存在,还是专门用于Firefox?

2 个答案:

答案 0 :(得分:2)

一种方法是抛出错误并检查堆栈跟踪以查找控制台注入所特有的字符串。像"InjectedScript"

这样的东西

这是一个有效的例子。

    var f = function(){
      var injected;
      try {
        throw new Error();
      } catch (e) {
        injected = e.stack.match('InjectedScript');
      }
      if (injected) {
        console.log("Called from console");
      } else {
        console.log("Called from code");
      }
    }
    // Add it to window so we can call it from the console.
    window.f = f;
    f();

答案 1 :(得分:0)

不幸的是,没有办法通过系统输入来判断,但你可以这样做"手动"在某种意义上使用溢出/过载功能。 See here有关如何在js中使用溢出/重载的优秀教程。

所以在你的代码中,在javascript中调用函数会为调用添加一个额外的参数,告诉函数它不会从控制台调用。

mySpecialFunc() <---- From console
mySpecialFunc(value) <---- From code