2012-08-03 3 views
0

알았어.이 질문이 많이 제기되었지만 해결 방법이 없다고 생각합니다. 여기 상황이 있습니다. 기존 사이트에 추가해야하는 웹 페이지가 있는데이 사이트는 손댈 수없는 마스터 페이지를 사용합니다. body 태그에 액세스 할 수 없기 때문에 javascripts.onload를 사용하도록 제한됩니다.windows onload가 외부 스크립트에서 실행되지 않음

내 페이지에서 다른 모든 외부 파일 아래 머리에 내 외부 .js 파일을 연결했습니다. 다음은 내 .js 파일의 예입니다.

var myobj = null; 
(5 or so functions that work properly. Mainly just toggles that show and hide divs. none touch the onload) 
function load(){ 
myobj = document.getElementById("my_element"); 
alert("test"); 
} 
window.onload = load; 

시도해보십시오. 경고를받지 못해로드 기능이 실행되지 않습니다. 나는로드 기능의 첫 번째 줄을 주석 처리하고 경보 만 표시하고 아직 아무것도 표시하지 않았습니다. 주변을 둘러 보면서 나는 성공하지 못하게하려고 또 다른 방법을 찾았습니다. 다른 모든 것은 내가 window.load를 제거하고 이것을 추가 한 것을 제외하고는 동일합니다.

function addLoadEvent(func) { 
var oldonload = window.onload; 
if (typeof window.onload != 'function') { 
    window.onload = func; 
} else { 
    window.onload = function() { 
     if (oldonload) { 
      oldonload(); 
     } 
     func(); 
    } 


    } 
} 
addLoadEvent(load); 
addLoadEvent(function() { 
    /* more code to run on page load */ 
    alert("hello2"); 
}); 

이 기능에서는 경고가 발생하지 않습니다. 나는 또한 작동하지 않는 기능 외에서 경고를 시도했다. 내가 사용하고

브라우저는

당신이 더 많은 정보를 필요로하는 경우 알려줘 IE 8.0.7600.16385 및 크롬 21.0.1180.60입니다.

오, 사이드 노트로 jquery 나 다른 자바 스크립트 라이브러리를 사용할 수 없습니다. 가능한 한 빛을 유지하려고합니다. 이 페이지는 IE8에서 작동해야합니다. 즉, 현재 지원되는 브라우저 만 지원됩니다. Chrome에서도 잘 작동한다면 좋을 것입니다.

편집 내가 완전히 잘못된 방향으로 가고있는 경우, 내가하려는 것은 내가 가지고있는 마지막 요소를 추적하는 것입니다. 본질적으로 2 개의 열이있는 페이지가 있고 왼쪽은 메뉴이고 오른쪽은 내용입니다. 콘텐츠는 한 번에 하나의 카테고리 만 표시되는 div에 모두 배치됩니다. 그것이 작동하도록되어있는 방식은 메뉴 범주를 클릭하면 이전 내용을 숨기고 새로운 내용을 보여줍니다.

내 콘텐츠 클래스를 display : none으로 설정했습니다. start_content ID가 display : block;으로 설정되도록하십시오. Javascript가해야 할 일은 start_content 객체로 내 글로벌을 초기화하는 것입니다. 메뉴를 클릭하면 obj.style.display = 'none'을 수행 한 다음 새로운 obj가 display = 'block'으로 설정됩니다. 그런 다음 새 obj를 가져 와서 내 전역 변수에 배치하여 다음 메뉴를 클릭 할 때 변경됩니다.

여기서이 가진 문제는 토글 기능 들어가면 prevContent가 불명 인 것을 온로드 기능

var prevContent = document.getElementById("start_content"); 
function toggle(id) { 
prevContent.style.display = "none"; 
var content = document.getElementById(id); 
content.style.display = "block"; 
prevContent = content; 
} 

임의없이 일례이다. 나는 머리에 this.js 파일을 연결하고 페이지가 아직 내 start_content를로드하지 않았기 때문에 이것이 가정되었다. 그래서 나는 널 전역으로 선언 한 다음 window.onload를 설정하는 이유를 변경했다. 생성 된 후 적절한 값을 설정하십시오.

+1

'function load(); {'는 ** 구문 오류입니다 ** ** 실제 코드가 어떻게 보이는지는 아마 문제 일 것입니다. (세미콜론은 문제입니다.) 오류 콘솔은 물론 이것을 보여줍니다. – Pointy

+0

@Pointy 아니, 그건 오타였다. 게시물을 수정하여 수정했습니다.도움이된다면 Chrome의 오류 콘솔에 "Uncaught TypeError : null의 속성 'style'을 읽을 수 없습니다."라는 메시지가 표시됩니다. 이는 메뉴에서 클릭을 한 다음 2 개의 함수를 통해 제대로 수행 한 다음 * prevContent.style .display = "none"; * null로 돌아 오는 변수입니다. – Tony318

답변

0

"Defer"를 머리에있는 스크립트 태그에 추가하면 트릭이 끝납니다.

관련 문제