2014-10-21 3 views
1

자바 스크립트 콜백이 문자열 함수 이름으로 전달되면 일부 응답을 보내는 외부 라이브러리가 있습니다. 함수 콜백이 호출 될 때마다 콜백 함수를 실행할 수 있기를 원합니다.자바 스크립트 함수 이름 (문자열)

function LibController(myCallback) { 
    this.libObject = new ThirdPartyLibrary("onTPLCallback"); 
} 

window.onTPLCallback = function() { 
    // Call to myCallback() in here 
}; 

function AnotherObject() { 
    this.myLibController = new LibController(function() { 
    // Callback stuff here 
    }); 
} 



// Library object emulation 
function ThirdPartyLibrary(callback) { 
    var sc = document.createElement('script'); 
    sc.innerHTML = 'javascript:' + callback + '();'; 
    document.head.appendChild(sc); 
} 

가능합니까?

이 이
+0

. 'myCallback'은'window.onTPLCallback'의 범위에 없습니다 ... 당신은이 함수의 바깥 쪽 범위에 무엇인가를 추가 한 다음'LibController' 내에 설정하고'onTPLCallback' 내에서 사용할 수 있습니다 ... 그러나 명확하지 않습니다. 나에게 무엇을하려고하는지 .. 또는 왜 – smerny

+0

제 3 자 라이브러리를 사용하지만 콜백을 전달하는 방법을 제공하는 라이브러리를 개발하고 싶습니다. 그래서 LibController에 제공되는 콜백을 호출하기 위해 제 3 자 라이브러리 콜백을 캡처해야합니다. – Frank

답변

0
당신은 window.onTPLCallback LibController 내부 생성자 배치하여 시도 할 수

(ThirtPartyLibrary 전에 배치되는이 그것을 가지고 구성되어) (jQuery를 사용할 수 없습니다) : 당신은 범위 지정 문제를보고있는

function LibController(myCallback) { 
    window.onTPLCallback = function() { 
    myCallback(); 
    }; 

    this.libObject = new ThirdPartyLibrary("onTPLCallback"); 
} 

function AnotherObject() { 
    this.myLibController = new LibController(function() { 
    // Callback stuff here 
    }); 
} 



// Library object emulation 
function ThirdPartyLibrary(callback) { 
    var sc = document.createElement('script'); 
    sc.innerHTML = 'javascript:' + callback + '();'; 
    document.head.appendChild(sc); 
}