2010-02-11 4 views
9

Google은 웹 서버의 동적 리소스에 스크립트 포함을 기록하는 JavaScript를 사용하여 다른 서버에서 제공되는 페이지간에 정보를 전달할 수 있습니다 사이트 간 스크립팅 제한IE는 동적으로 추가 된 스크립트 파일을 간헐적으로 실행하지 않습니다.

아이디어는 브라우저가 서버 측의 동적 리소스 (일부 서버 측 정보를 요청에 넣음)를 통해 제공되는 JavaScript 파일을 요청한다는 것입니다. JavaScript 파일은 페이지에 추가 될 때 브라우저에 의해 실행됩니다.

Internet Explorer에서 문제가 발생하여 응답에 반환 된 JavaScript가 페이지에 추가 될 때 간헐적으로 실행되지 않습니다. 문제가 발생했을 때 Fiddler HTTP 추적을 검사하면 스크립트가 브라우저에 성공적으로 반환되었음을 알 수 있습니다.

내가 아래 루프 1000 번 실행하는 스크립트를 추가하는 코드를 변경, 더 안정적이를 테스트하려면 :

: ajavascriptfile.js에 의해 반환 된 스크립트가 단순히 내 페이지에 카운터를 증가
for (var i = 1; i <= 1000; i++) { 
    try { 
     var script = document.createElement("SCRIPT"); 
     script.src = serverHome + "/ajavascriptfile.js?token=" + token + "&num=" + i; 
     script.id = token; 
     document.getElementsByTagName("HEAD")[0].appendChild(script); 
    } catch (e) { 
     alert(e); 
    } 
} 

var output = document.getElementById("output"); 
output.innerHTML = parseInt(output.innerHTML) + 1; 

이 테스트에서는 예외가 발생하지 않습니다.

제대로 실행되면 카운터가 1000이됩니다 (Firefox에서 사용). 그러나 IE6에서는 평균 900-950, IE7은 약 995-998이며 IE8은 충격적인 750-800입니다.

다른 누구도 동적으로 포함 된 스크립트를 실행하지 않는 Internet Explorer가 있습니까? 그렇다면이 문제를 해결하는 방법을 알고 있습니까?

+0

우연히 페이지에 선언 된'가 있습니까? –

+0

아니요 페이지에 이 없습니다. –

+0

이 문제를 해결하기 위해 노력하고 있지만 확실하지 않은 이유가 잘못되었습니다. – JustEngland

답변

0

Internet Explorer에서 스크립트 파일을 캐싱 중일 수 있습니다. SRC에 몇 가지 추가 엔트로피를 추가하는 시도는 다음과 같습니다

script.src = serverHome + "/ajavascriptfile.js?token=" + token + "&num=" + i + '&r=' + Math.random(); 
+0

'& num = "+ i"는 각 요청마다 고유하므로 캐싱이 문제가되어서는 안됩니다. ''& num = "+ i"를 제거하면 IE7은 서버에 대한 단일 요청 만 수행하고 카운터는 거의 즉시 1000에 도달합니다. 또한 정상적인 상황 (이 문제가 처음 발생한 곳)에는 단 하나의 요청 만 있습니다. 나는 그것을 더 믿을만하게 시도하고 재현하기 위해 1000 번만 요구한다. –

+0

프로덕션 시스템에서 캐싱은 여전히 ​​문제가 될 수 있습니다. 즉 프로덕션 환경에서 요청할 때마다 스크립트 URL이 고유합니까? 어느 쪽이든 (테스트 루프 또는 프로덕션 환경에있을 때) IE 동작은 예기치 않은/작동하지 않습니다. – leepowers

+0

@James : 테스트 중에도 동일한 URL을 몇 번이나 요청했는지에 따라 & num을 사용하는 경우에도 IE가 여전히 캐싱 할 수 있습니다. pygorex1이 말했듯이, 엔트로피를 더 추가하십시오. 어쩌면 타임 스탬프 값이나 그와 비슷한 것일 수도 있습니다. – NotMe

1

그것은 스크립트들이 머리에 추가 된 순서대로 대기되지 않지만, 그들은은 ActiveState가 완료있어 즉시 해석되고 있다고 할 수있다, 캐시 또는 다운로드에서 가져옵니다. 마지막으로로드하도록 요청한 스크립트가 먼저 발생하면 문제가 발생할 수 있습니다. ,

IE8 내가 IE7 4를 허용 생각, 6 동시 스크립트를 허용하고, 6은 나뿐만 아니라 오페라, 크롬과 사파리에서 이것을 보았다

2. 허용 (하지만 파이어 폭스 아직) 그래서 더로드하고있는 경우 하나의 스크립트보다, 필요한 파일에서 함수의 형식을 테스트하고, 찾을 수없는 경우 타이머 콜백을 사용하여 리소스를 사용할 수 있음을 알 때까지는 모든 명령을 실행합니다.

+0

이 경우 일 수 있습니다. 그러나이 문제는 페이지에 하나의 스크립트 만 추가 할 때 재현되었습니다. 문제를보다 확실하게 재현 할 수 있도록 루프를 추가했습니다. –

관련 문제