質問
元のイベント パラメータがなくても、関数がユーザー イベントまたは非同期イベント (コールバックなど) によって起動されたかどうかを知ることは可能ですか?
バックグラウンド
元のイベント トリガーが誰であるかがわからない、より深い関数呼び出しでイベント ソースを特定しようとしています。
ポップアップまたはリダイレクト ログイン システムを呼び出すには、そのことを知っておく必要があります。しかし、この関数は多くの場所から呼び出されるため、すべての呼び出し元にイベント パラメーターを渡すことはできません。
重要:最終関数にパラメーターを渡すことができません。b('timer')
許可されていません。
例えば:
<a onclick="b()" >call</a>
<script>
function a(){
b();
}
function b(){
final();
}
function final(){
//Is there something like this caller.event.source ?
console.log(this.caller.event.source)
}
setTimeout(a,1000);
source == 'timer'
その例では、または'onclick'
、またはその他の情報を取得して、どちらがイベントの発生元であるかを判断しようとしています。
アップデート
basilikun アプローチに基づいて、このソリューションを実装しました。
function final(){
var callerFunction = arguments.callee.caller,
evtArg = callerFunction.arguments[0];
while(callerFunction.caller){
callerFunction = callerFunction.caller;
if (callerFunction.arguments[0]) {
evtArg = callerFunction.arguments[0];
}
}
console.log(evtArg&&evtArg.type?'event fired by user':'event async');
}
これがフィンドル
他のアプローチはありますか?