2012-10-10 5 views
0

HTML 파일에 JS 함수 내부에 삽입하려는 외부 JS 파일의 일부 JS가 있습니다. HTML 파일에서 JS 스크립트를 만질 수 없으므로이 방법을 사용할 수 있는지 궁금합니다.외부 스크립트의 자바 스크립트를 HTML의 javascript에 삽입하십시오.

여기 JS 파일을 HTML 파일에 JS 함수 안에 삽입하고 싶습니다.

// FIRST JS TO INSERT 
if (OS == "mobile"){ 
     killVideoPlayer(); 
    } 

// SECOND JS TO INSERT 
if (OS == "mobile"){ 
     loadHtmlFiveVideo(); 
     if (!document.all){ 
      flvPlayerLoaded = false; 
     } 
    }else { 
     loadVideoPlayer(); 
    } 

그럼 여기에 삽입하고 싶습니다.

<script> 
function mediaTypeCheck() { 
if (bsiCompleteArray[arrayIndex].mediaType == "video") { 
// INSERT FIRST JS HERE 
    document.getElementById("bsi-video-wrap").style.display = "block"; 
    document.getElementById('pngBsi').style.display = "block"; 
    document.getElementById("frame_photo").style.display = "none"; 
    document.getElementById("relativeFrame").style.display = "block"; 
    document.getElementById("buy-me-photo-button-bsi").style.display = "none"; 
// INSTER SECOND JS HERE  
    loadVideoPlayer(); 
} 
if (bsiCompleteArray[arrayIndex].mediaType == "photo") { 
    killVideoPlayer(); 
    document.getElementById("bsi-video-wrap").style.display = "none"; 
    document.getElementById('pngBsi').style.display = "block"; 
    document.getElementById("relativeFrame").style.display = "block"; 
    document.getElementById("frame_photo").style.display = "block"; 
    document.getElementById("buy-me-photo-button-bsi").style.display = "block"; 
    if (!document.all){ 
     flvPlayerLoaded = false; 
    } 
} 
} 
</script> 

고맙습니다!

답변

1

자바 스크립트에서, 당신은 새와 변수를 덮어 쓸 수 있습니다 기능을 포함하여 언제든지 값을 사용할 수 있습니다.

외모에 따라 mediaTypeCheck 기능을 필요한 기능을 수행하는 것으로 대체 한 다음 원래 기능을 호출 할 수 있습니다.

예.

(function(){ 
    // keep track of the original mediaTypeCheck 
    var old_function = mediaTypeCheck; 
    // overwrite mediaTypeCheck with your wrapper function 
    mediaTypeCheck = function() { 
    if (conditions) { 
     // do whatever you need to, then ... 
    } 
    return old_function(); 
    }; 
})(); 

위의 내용은 mediaTypeCheck 함수를 정의한 후에 발생하는 한 모든 스크립트에서로드 할 수 있습니다.

+0

이 코드를 사용할 때 오류가 발생합니다. Uncaught SyntaxError : 예기치 않은 토큰 함수 – Justin

+0

복사 붙여 넣기 오류가 모두 – jimbojw

+0

로 수정되었습니다. 따라서 함수가 먼저로드되는지 확인하도록 조금 개선되었습니다.귀하의 코드를'setInterval (function() { \t if (typeof mediaTypeCheck === 'function') {여기에 코드}, 100) 안에 넣으면 완벽하게 작동합니다! – Justin

0

JS를 JS 안에 삽입 할 수 없습니다. 무엇 할 DOM에 다른 태그를 삽입하고 외부 JS 파일에 대한 SRC를 지정합니다.

+0

정말요? emberjs와 같은 일부 라이브러리는 스크립트를 문자열로 조작 할 수 있으므로 다른 스크립트에서 스크립트를 삽입하는이 기법을 사용할 수 있습니다. 나는 시도하지 않았다. – Christophe

+1

물론 가능합니다. 초보자를위한 것은 아닙니다. –

0

$.getScript(url)을 사용하여 js 파일을 직접 삽입 할 수 있습니다.

스크립트가 텍스트 인 경우 스크립트 태그를 만들 수 있습니다.

var script = docuent.createElement('script'); 
script.innerText = text; 
document.getElementsByTagName('head')[0].appendChild(script); 
1

나를 위해 가장 쉬운 방법은 이전에 서버 측 포함을 사용하고있었습니다. 백엔드에 따라 PHP 또는 ASP 페이지 또는 ".js"와 유사한 MIME 유형으로 응답하도록 설정할 수 있습니다.

나는 PHP 사람 아니에요,하지만 당신은 같은 것을 할 것입니다 : (내 구문이 잘못된 경우, 다른 사람이 그것을 해결하시기 바랍니다)

<?php 
//adding this header will make your browser think that this is a real .js page 
header('Content-Type: application/javascript'); 
?> 

//your normal javascript here 
<script> 
function mediaTypeCheck() { 
if (bsiCompleteArray[arrayIndex].mediaType == "video") { 

//here is where you would 'include' your first javascript page 
<?php 
     require_once(dirname(__FILE__) . "/file.php"); 
?> 

//now continue on with your normal javascript code 
document.getElementById("bsi-video-wrap").style.display = "block"; 
document.getElementById('pngBsi').style.display = "block"; 
....... 
0

귀하의 경우 문제는 html의 스크립트를 만질 수 없기 때문에 클라이언트 측에서 수행 할 수 없다는 것입니다.

최소한 스크립트 태그 (하지 스크립트 자체)을 만지지 수 있다면, 당신은 사용자 정의 유형이 실행되기 전에 예를 들어, 그것을 조작하는 추가 할 수 있습니다

<script type="WaitForInsert"> 
0

귀하의 질문은 이상한 보이는을, 그러나 가능한 것처럼 보인다. 빨리/더러운 작업 코드를 시험해보고 자신의 상황을 구현하십시오.

$(document.body).ready(function loadBody(){ 
var testStr = test.toString(); 
    var indexAcc = testStr.indexOf("{"); 
    var part1 = testStr.substr(0, indexAcc + 1); 
    var part2 = testStr.substr(indexAcc + 1, testStr.length - indexAcc - 2); 
    var split = part2.split(";"); 
    split.pop(); 
    split.splice(0,0, "alert('a')"); 
    split.splice(split.length -1, 0, "alert('d')"); 
    var newStr = part1 + split.join(";") + ";" + "}"; 
    $.globalEval(newStr); 
    test(); 
} 
function test(){ 
    alert('b'); 
    alert('c'); 
    alert('e'); 
} 
+0

문제는 당신이 너무 늦었다는 것입니다. 문서 준비가 끝나기 전에 스크립트가 이미 실행되었고, 스크립트를 조정할 기회가 있습니다. – Christophe

관련 문제