2014-12-11 2 views
2

현재 외부 API와 통신하고 반환 될 때 JSONP 데이터를 검색하는 데이터 집약적 인 웹 응용 프로그램을 작성 중입니다. 이 스크립트는 head.js v1.0.3이라는 라이브러리에 따라 다릅니다. 이를 수행하려면 http://headjs.com/. 그러나 IE 11에서 어떤 이유로 스크립트가 실제로로드되기 전에 스크립트의 onload 이벤트가 발생한다는 사실을 알게되었습니다. 이 동작은 head.js를 사용하는지 여부를 나타냅니다. 또는 반환 된 데이터를 캡처하도록 onload 이벤트를 설정하여 스크립트 요소를 만들 수 있습니다. 때로는 효과가 있으며 때때로 그렇지 않습니다. 더 이상한 것은 브라우저 세션이 진행되는 동안 계속 발생하는 것으로 보인다는 것입니다.IE11 스크립트 onload가 작동하지 않습니다 (때때로)

해결 방법에 대한 아이디어가 있으십니까? 여기

몇 가지 예제 코드입니다 : 연구의 조금 후

//somejson.js 
/* 
    window["queryResult"] = {blah:'blah'} 
*/ 

function loadScript() { 
    head.load("/somejson.js", afterScriptLoad) 
} 

function afterScriptLoad() { 
    var result = queryResult 
    //Throws error because window.queryResult is sometimes undefined 
} 
+0

'loadScript'를 호출하기 전에'afterScriptLoad'를 선언하거나 익명 함수로 전달할 때 작동합니까? – GolezTrol

+0

동일한 일이 익명의 함수에서 발생합니다. 내가 해결 방법을 찾은 것 같아. 이상적은 아니지만 작동하는 경우 나중에 세부 정보를 게시합니다. –

+0

나는 또한 문제가 발생합니다. 교차 출처 js 요청이 예를 들어 11의 onload 이벤트를 전달하지 않는 것 같습니다. – cocoa

답변

0

,이 버그를 해결하는 유일한 방법은 API를 수정하는 것 같다 JSONP를 유지하는 변수가 초기화되면 것을, 스크립트 그래서 자체가 콜백을 트리거합니다. 불행하게도이 API는 사용중인 API를 수정할 수있는 권한이 없어도 문제를 해결할 수 있습니다.

//somejson.js 
/* 
    window["queryResult"] = {blah:'blah'}; scriptCallback() 
*/ 
function loadScript(callback) { 
    var c = new afterScriptLoad(callback) 
    window["scriptCallback"] = c 
    head.load("/somejson.js", c) 
} 
function afterScriptLoad(callback) { 
    var retrieved = false 
    return function() { 
     if (!retrieved) { 
      retrieved = true 
      callback(queryResult) 
     } 
    } 
} 
function myCallback(response) { 
    //do something 
} 
관련 문제