6

javascript 関数がブラウザのコンソールまたはソース コードから呼び出されているかどうかを確認する方法があるかどうかを知りたいです。

コンソールからかページからかを確認できる関数を定義しましたが、Google Chrome でのみ機能し、Firefox では機能しません。他のブラウザーはテストしていません。

function fromConsole()
{
    var Caller = arguments.callee.caller;
    while(Caller.caller != null)
        Caller = Caller.caller;
    return (Caller.toString().indexOf("function (expression, objectGroup,"))!=-1;
}

この機能のしくみ

この関数は、関数を呼び出した最上位の関数を探します。google chrome では、コンソールから呼び出されるトップ関数の定義に、function (expression, objectGroup,firefox でこの文字列が含まれている場合、関数はありません

詳しくご説明いたします

この例があるとしましょう

function a()
{
    b();
}
function b()
{
    return c();
}
function c()
{
    console.log(fromConsole());
}

ページから関数 a() を呼び出すと、コンソールに false と表示されます (最上位の関数が a() であるため) function (expression, objectGroup,...

Firefox では、関数をコンソールから呼び出してもページから呼び出しても、最上位の関数は常に a() です。

私の質問は: 関数がコンソールから呼び出されたかどうかを知る方法はありますか?

4

3 に答える 3

4

これは、パブリック (グローバル、js コンソールによって呼び出される) またはプライベート (コード) コンテキストから呼び出されたかどうかを確認するクロスブラウザーの方法です。

(function() { 
    window.f = function() {
        console.log('public')
    } ;
    //f will be this function in the rest of the code in this outer function:
    var f = function() {
        console.log('private'); 
    }
    f();
    //more code here...

}) ()

外部関数内のコードはプライベート関数を使用しますが、f()コンソールから実行するとパブリック関数が実行されます。

于 2014-07-29T01:41:05.897 に答える