문제

나는 다음과 같은 스크립트 첫 번째와 세번째 document.writeline 는 정적이며 두 번째로 생성:

<script language="javascript" type="text/javascript">
document.write("<script language='javascript' type='text/javascript' src='before.js'><\/sc" + "ript>");
document.write("<script language='javascript' type='text/javascript'>alert('during');<\/sc" + "ript>");
document.write("<script language='javascript' type='text/javascript' src='after.js'><\/sc" + "ript>");
</script>

폭스 크롬 표시 , 후에, 는 동안 인터넷을 탐색기 처음을 보여줍 고 그 다음 표시 후에.

하는 기사를국 는 나가지 않은 첫 번째가 발생하지만,이는 거의에게 있습니다.

가 누구나 알 수 있는 방법 설정하기 위해 명확 모든 브라우저에서,또는 해킹 IE 같은 모든 다른 브라우저가 제정신가?

주의 사항:코드 조각은 매우 간단한 재현.그것은 그 서버에서 생성됩니다 및 두 번째 스크립트는 유일한 것을 변경합니다.그것은 긴 스크립트와 이유는 두 가지 스크립트를 전후 그것은 그래서 브라우저 캐시들 및 동적 부분의 코드 작은 가능합니다.그것도 나타나 많은 시간에는 동일한 페이지와 다른 생성된 코드입니다.

도움이 되었습니까?

해결책 2

내가 찾는 대답을 원하는대로:

<script language="javascript" type="text/javascript">
document.write("<script language='javascript' type='text/javascript' src='before.js'><\/sc" + "ript>");
document.write("<script defer language='javascript' type='text/javascript'>alert('during');<\/sc" + "ript>");
document.write("<script defer language='javascript' type='text/javascript' src='after.js'><\/sc" + "ript>");
</script>

이것이 연기 선적 모두의 후에 페이지까지 로딩이 완료.

내 생각에 이것은 좋은 나를 얻을 수 있습니다.희망,사람을 줄 수 있을 것입니다 더 나은 대답합니다.

다른 팁

아이의 행동을 인터넷 Explorer.

가 붙어 있는 경우 스크립트를 동적으로,IE,Firefox,Chrome 은 모든 스크립트를 다운로드에 있는 비동기 방식이다.

폭스 크롬까지 기다릴 것이 모두 비동기는 요청에 반환한 후 실행하는 스크립트에서 주문하는 그들은 첨부 DOM 지만 IE 실행하는 스크립트에서 주문하는 그들은 그 반환을 통해 와이어입니다.

이후에 경고 시간이 적게 걸리를"검색"이는 외부 자바 스크립트 파일,그 가능성을 설명하는 행동을 보고 있다.

에서 Kristoffer Henriksson 의 게시물 주제에의 비동기식 스크립트 로드:

이 시나리오에서는 IE,Firefox 이 다운로드 스크립트를 모두 하지만 인터넷 탐색기가 실행에서 그들을 기 위해 그들이 완료 다운로드 반면,파이어 폭스 다운로드 비동기적으로만 여전히 그들을 실행합 에서 순서에 첨부 DOM.

Internet Explorer 에서 즉 스크립트가 있을 수 없습 dependancies 에 로 다른 실행 순서 에 따라 달라질 수 네트워크 교통,캐시,등등.

을 고려하여 자바 스크립트 로더입니다.그것은 당신이 지정하는 스크립트의 종속성과의 순서를 실행하는 동안 또한 로드 스크립트를 비동기적으로 속도로 부드럽게 어떤 브라우저의 차이점이 있습니다.

이것은 매우 좋 개요 그들 중 몇 가지: 우수한 자바 스크립트:다른 스크립트 로더.

나는 모두 사용 RequireJS 및 LabJS.내 생각,LabJS 조금 더 적은 자기의 의견을 굽히지 않습니다.

슬라이드의 25/26 이 프리젠테이션 에 대해 이야기적 특성의 다른 방법을 삽입하는 스크립트가 있습니다.그것은 제안이만 브라우저를 실행하는 스크립트들의 순서.모든 다른 브라우저는 순서대로 실행하여 그들이 로딩이 완료.도 IE 를 실행하지 않습니다 그들기 위해서는 하나 이상일 경우에는 인라인 js 대신 src.

방법 중 하나 제안을 삽입하는 새로운 DOM 요소:

var se1 = document.createElement('script');
se1.src = 'a.js';

var se2 = document.createElement('script');
se2.src = 'b.js';

var se3 = document.createElement('script');
se3.src = 'c.js';

var head = document.getElementsByTagName('head')[0]
head.appendChild(se1);
head.appendChild(se2);
head.appendChild(se3);

하게 두 번째 스크립트 섹션에서 생성되는 스크립트를 사용하여를 생성하는 콘텐츠를 전달하는 매개변수:

se2.src = 'generateScript.php?params=' + someParam;

편집:에도 불구하고 어떤 문서가 위치를 차지 말,테스트 제안하는 대부분의 브라우저에서 실행됩니다 당신의 문서입니다.스크립트를 작성하기 위해서는 경우 그들은 각 src,그래서 내가 생각하는 동안 위의 방법이 선호하는,당신이 할 수 있는 이뿐만 아니라:

<script language="javascript" type="text/javascript">
document.write("<script type='text/javascript' src='before.js'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='during.php?params=" + params + "'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='after.js'><\/sc" + "ript>");
</script>

편집 다시(댓글에 응답하는 자신과 다른 사람):당신은 이미 스크립트를 생성에서 당신의 페이지입니다.당신이 무엇을 하고 있는 이동할 수 있는 다른 서버 측의 생성하는 스크립트와 같은 블록의 코드입니다.해야 하는 경우 매개변수는 당신의 페이지에 전달하는 스크립트 쿼리에서 문자열입니다.

또한,당신은 당신이 사용할 수 있는 이와 동일한 방법으면,당신은 제안에,당신은 생성하고 있는 인라인 스크립트를 여러 번:

<script language="javascript" type="text/javascript">
document.write("<script type='text/javascript' src='before.js'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='during.php?params=" + params1 + "'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='during.php?params=" + params2 + "'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='during.php?params=" + params3 + "'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='after.js'><\/sc" + "ript>");
</script>

그러나,이것은 보이기 시작한 것만 같은 접근이 잘못된 방법입니다.를 생성하는 경우 큰 블록의 코드가 여러 번 다음 당신은 아마도 대체로 하나의 js 함수를 호출된 다른 params 대...

좋아요...중...

// During.js
during[fish]();

후...

// After.js
alert("After");
fish++

HTML

<!-- some html -->
<script language="javascript" type="text/javascript">
document.write("<script language='javascript' type='text/javascript' src='before.js'></sc" + "ript>");
document.write("<script language='javascript' type='text/javascript'>during[" + fish + "] = function(){alert('During!' + fish);}</sc" + "ript>");
document.write("<script language='javascript' type='text/javascript' src='during.js'></sc" + "ript>");
document.write("<script language='javascript' type='text/javascript' src='after.js'></sc" + "ript>");
</script>
<!-- some other html -->
<script language="javascript" type="text/javascript">
document.write("<script language='javascript' type='text/javascript' src='before.js'></sc" + "ript>");
document.write("<script language='javascript' type='text/javascript'>during[" + fish + "] = function(){alert('During!' + fish);}</sc" + "ript>");
document.write("<script language='javascript' type='text/javascript' src='during.js'></sc" + "ript>");
document.write("<script language='javascript' type='text/javascript' src='after.js'></sc" + "ript>");
</script>

나는 동의하는 방법에 대해 이 시작하는 냄새,하지만.특히,왜 당신은 코드 생성하는 동안""으로 동적으로 만들어진 js 파일 삽입니까?

참고하는 동적으로 생성하는 스크립트가 함수 두 번째 문서입니다.작성합니다.
에서 테스트 FF2,IE7

할 수 있습 secuential 실행를 정의하여"onload"(또는 이와 유사한 것)이벤트에서 스크립트를 주입한 다음 중 하나 이벤트에서는 기능입니다.그것은 간단하지 않습 있지만,많은 예 밖에,여기에 하나입니다.

http://www.phpied.com/javascript-include-ready-onload/

나는 생각한 인기 있는 라이브러리를 좋아하 jQuery 프로토타입 또는 도움이 될 수 있습니다.

코드를 제공합니다:

<script language="javascript" type="text/javascript">
document.write("<script language='javascript' type='text/javascript'>function callGeneratedContent() { alert('during'); }<\x2Fscript>");
document.write("<script language='javascript' type='text/javascript' src='before.js'><\x2Fscript>");
document.write("<script language='javascript' type='text/javascript' src='after.js'><\x2Fscript>");
</script>

에 before.js:

alert("Before");
callGeneratedContent();

에 after.js:

alert("After");

가 생성 된 첫 번째 라인,그렇지 않으면 FF 불평하기 때문에 그것이 실행 before.js 을보고하기 전에 이 기능을 정의합니다.

는 방법에 대해는:

<script>
document.write("<script src='before.js'><\/script>");
</script>

<script >
document.write("<script>alert('during');<\/script>");
</script>

<script>
document.write("<script src='after.js'><\/script>");
</script>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top