스크립트가로드 된 후 자바 스크립트 함수 호출
나는 아래와 같은 자바 스크립트를 통해 동적으로 html을 추가하는 html 페이지가 있습니다.
<script type="text/javascript" src="/myapp/htmlCode"></script>
js 함수를 호출하고 싶습니다. eg loadedContent (); 위의 스크립트가 동적 html을 추가하면.
누군가 내가 어떻게 할 수 있습니까?
head.js javascript를 사용하지 않고도이를 달성 할 수 있습니다.
function loadScript( url, callback ) {
var script = document.createElement( "script" )
script.type = "text/javascript";
if(script.readyState) { // only required for IE <9
script.onreadystatechange = function() {
if ( script.readyState === "loaded" || script.readyState === "complete" ) {
script.onreadystatechange = null;
callback();
}
};
} else { //Others
script.onload = function() {
callback();
};
}
script.src = url;
document.getElementsByTagName( "head" )[0].appendChild( script );
}
// call the function...
loadScript(pathtoscript, function() {
alert('script ready!');
});
나는 같은 문제가 있었다 ... 내 솔루션 (jQuery없이) :
<script onload="loadedContent();" src ="/myapp/myCode.js" ></script>
이렇게 해봐
var script = document.createElement('script');
if(script.readyState) { //IE
script.onreadystatechange = function() {
if ( script.readyState === "loaded" || script.readyState === "complete" ) {
script.onreadystatechange = null;
alert(jQuery);
}
};
} else{//others
script.onload = function() {
alert(jQuery);
}
}
script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"
document.documentElement.appendChild(script);
간격 타이머를 설정하고 스크립트가로드되면 타이머를 취소하고 작업을 수행 할 수 있습니다.
var fileInterval = setInterval(function() {
if (functionInFile) {
// do something
clearInterval(fileInterval); // clear interval
}
}, 100); // check every 100ms
실제로 loadedContent()
로드하는 스크립트의 마지막 줄에를 넣을 수 있습니다 (이는 JSONP의 개념입니다).
2019 년에는 모든 대상 브라우저가 ES6를 지원하거나 babel을 사용하는 경우 새로운 접근 방식이 더 바람직 할 수 있습니다 .
@JaykeshPatel 의 대답 은 괜찮지 만 다음을 기반으로 한 더 현대적인 솔루션이 있습니다 Promise
.
// definition
function loadScript(scriptUrl) {
const script = document.createElement('script');
script.src = scriptUrl;
document.body.appendChild(script);
return new Promise((res, rej) => {
script.onload = function() {
res();
}
script.onerror = function () {
rej();
}
});
}
// use
loadScript('http:// .... /jquery.js')
.then(() => {
console.log('Script loaded!');
})
.catch(() => {
console.error('Script loading failed :( ');
});
추신. 다음과 같이 Promise 콘텐츠를 줄일 수 있습니다.
script.onload = res;
script.onerror = rej;
head.js를 확인하십시오 . 파일이 성공적으로로드되고 실행될 때 콜백을 제공하여 원하는 것을 달성합니다.
내 대답은 Jaykesh Patel 대답 의 확장입니다 . 여러 자바 스크립트 를로드하기 위해이 코드를 구현했습니다 . 이것이 누군가에게 도움이되기를 바랍니다.
// RECURSIVE LOAD SCRIPTS
function load_scripts( urls, final_callback, index=0 )
{
if( typeof urls[index+1] === "undefined" )
{
load_script( urls[index], final_callback );
}
else
{
load_script( urls[index], function() {
load_scripts( urls, final_callback, index+1 );
} );
}
}
// LOAD SCRIPT
function load_script( url, callback )
{
var script = document.createElement( "script" );
script.type = "text/javascript";
if(script.readyState) // IE
{
script.onreadystatechange = function()
{
if ( script.readyState === "loaded" || script.readyState === "complete" )
{
script.onreadystatechange = null;
callback();
}
};
}
else // Others
{
script.onload = function() { callback(); };
}
script.src = url;
document.getElementsByTagName( "head" )[0].appendChild( script );
debug("javascript included: "+url);
}
// EXAMPLE
var main = function()
{
console.log("main function executed");
}
var js = [ "path/to/script-1", "path/to/script-2", "path/to/script-3" ];
load_scripts( js, main );
참고 URL : https://stackoverflow.com/questions/14644558/call-javascript-function-after-script-is-loaded
'Programing' 카테고리의 다른 글
직접 실행 창에서 동적으로 인해 'Microsoft.CSharp.RuntimeBinder.Binder'가 정의되지 않았거나 가져온 오류가 발생합니다. (0) | 2020.11.14 |
---|---|
std :: flush는 어떻게 작동합니까? (0) | 2020.11.14 |
Intellij 확대 / 축소 방법 (0) | 2020.11.14 |
AngularJS 지시문은 범위 변수 변경시 업데이트되지 않습니다. (0) | 2020.11.14 |
Linux에서 데몬 로그인 (0) | 2020.11.14 |