2017-05-04 10 views
1

왜 작동하지 않습니까? 나는 그 질문이 싫은 줄 알지만, 제 경우에는이 스크립트를 머리에 추가하는 것이 내가 원하는 방식으로 작동하지 않는 이유를 알 수 없습니다.<head>에 스크립트를 추가해도 작동하지 않지만 수동으로 작성합니까? Chrome 디버거에서 동일하게 렌더링됩니다.

스크립트를 추가하여 크롬 디버거에서 볼 수 있습니다. 내가 복사/경우 크롬 디버거에서 직접 (내 스크립트에 의해 만들어 머리에 추가 된 하나)을 outerHTML에 붙여 넣기 때문에 그러나 나는 아직도 이해가되지 않습니다 오류

tools.js:26 Uncaught ReferenceError: script_object is not defined

를 얻을, 직접 내 index.htm에 붙여 넣으십시오. 그렇다면 잘 작동합니다.

코드 :

var afterTools = document.getElementById("toolsId").nextSibling; 
var script = document.createElement("script"); 
script.setAttribute("type","text/javascript"); 
script.setAttribute("src","scripts/thescript.js"); 

document.head.insertBefore(script, afterTools); 


let temp = script_object; // Object hardcoded in thescript.js 
console.log(temp); 

난 후 추가 해요 스크립트 :

<script id="toolsId" type="text/javascript" src="scripts/tools.js" defer></script> 

무엇이 아래로 비등하면 해당 크롬의 디버거를 수동으로 스크립트를 작성하거나를 추가 사이의 차이를 보여줍니다 . 그러나 수동으로 작성하지 않는 한 스크립트 내의 객체를 인식하지 못합니다.

답변

1
tools.js:26 Uncaught ReferenceError: script_object is not defined 

변수를 인스턴스화하기 전에 참조하고 있습니다. 그것은 .. 아마 당신이 defer를 사용하고 있다는 사실에 의한, 그것을 참조하기 전에 사용할 수 있어야합니다

이 부울 속성이 스크립트를 실행하기위한 것입니다 브라우저에 표시하도록 설정되어

연기 문서가 구문 분석 된 후 DOMContentLoaded가 실행되기 전에 이 발생합니다. 지연 특성은 외부 스크립트에서만 사용되어야합니다 ( ).

소스 : https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/script

그래서 브라우저는 따라서는 그 순간에 사용할 수없는 경우에 달려 첫 번째 코드 후를 실행한다.

+0

간단한 수정이 필요합니까, 아니면 필자가 작성한 스크립트 목록을 작성해야합니까? – Peebl