2012-09-25 1 views
0

Google Chrome 용 브라우저 액션 확장을 개발하는 중이고 자바 스크립트 기능을 여러 파일로 나눕니다. popup.html 파일에서 스크립트 자원다음 콘텐츠 보안 정책 지시문을 위반하여 스크립트를 평가하지 못했습니다. "script-src 'self'"

<script src="js/Identity.js"></script> 
<script src="js/View.js"></script> 

View.js이 Identity.js에서 노출 된 개체의 메서드로 호출해야하고, 프로세스가 완료 될 때 콜백 함수가 통지를 전달 같이 정의된다. 그러나 크롬이 실행을 중단 할 것으로 보입니다.

는 다음과 같은 내용을 보안 정책 지침을 위반 스크립트를 평가 거부 "스크립트 src에 '자기'"

를 내가 이해하는 바로는, 구글 정책에 임의의 문자열을 방지하는 것을 말한다 실행 가능한 논리 블록으로 평가할 수 있습니다. 그러나 나는 내 개체 사이에 실제 기능을 전달하므로 여기에 무엇을 수정해야하는지 잘 모르겠다.

보기 개체에서
IdentityObj.Process = function (params, callback) { 
    doSomeWork(); 
    setTimeout(callback(true), 1000); // break here 
}; 

, 예 이제 난 당신이 언급 한 이해,

View.loginClick = function(event) { 
     event.preventDefault(); 
     this.loggingInState(); 

     var emailAddr = $('#emailAddr').val(); 
     var password = $('#password').val(); 
     IdentityObj.login(emailAddr, password, this.loginCallback.bind(this)); 
    }; 

View.loginCallback = function(success) { 
     if (success) { this.usageState(); } 
     else { this.errorState(); } 
    }; 
+0

'callback'은 함수를 반환하지 않습니다. 그렇지 않은 경우 실제 코드를 표시하십시오. –

+0

무슨 뜻인지 이해가 안됩니다. 콜백은 호출자 객체의 함수입니다.이 메서드는 작업이 완료되면 호출합니다. – icelava

+0

'callback'의 정의를 보여줍니다. –

답변

2

내 동료가 문제를 자랑 해 보였다 그것을 설명 할 것이다.

나는 이며, setTimeout() 정의에서 콜백 함수를 직접 실행하므로 setTimeout()은 콜백 자체 대신 콜백 결과 (true)를 수신합니다. 그러면 평가가 필요하므로 Chrome 보안 정책이 실행됩니다.

callback()의 ​​실행은 함수 선언에 래핑되어야합니다.

IdentityObj.Process = function (params, callback) { 
    doSomeWork(); 
    setTimeout(function(){callback(true)}, 1000); // break here 
}; 
관련 문제