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

How to know when a JavaScript function is called from a console?

本文关键字:调用 JavaScript 函数 控制台 何知道 何时      更新时间:2023-09-26

我希望一个特定的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中?

一种方法是抛出错误并检查堆栈跟踪,以查找控制台注入所特有的字符串。比如"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();

不幸的是,没有办法通过系统输入来判断,但你可以在某种意义上使用溢出/过载函数"手动"完成。这里有一个关于如何在js中使用overflow/overload的优秀教程。

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

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