2010-08-17 5 views
3

최상위 프레임이나 Firebug의 컨텍스트에서 프레임에 정의 된 함수를 호출 할 때 DOM 및 JavaScript 및 새로운 문제에 익숙합니다. 아래의 프레임을 감안할 때Javascript/jQuery : 다른 프레임에서 함수 호출하기

:

<html> 
    <body> 
    <frameset cols="*" rows="81,*"> 
     <frame id="topFrame" tabindex="1" name="topFrame" noresize="noresize" scrolling="No" src="hometop.aspx"/> 
     <frameset border="0" cols="214,*" frameborder="no" framespacing="0"> 
      <frameset border="0" cols="*" frameborder="no" framespacing="0" rows="70,*"> 
       <frame tabindex="-1" id="chatFrame" name="chatFrame" scrolling="No" noresize="noresize" src=""/> 
       <frame tabindex="-1" id="leftFrame" name="leftFrame" noresize="noresize" src="leftFrame.aspx"/> 
      </frameset> 
      <frame tabindex="-1" id="mainFrame" name="mainFrame" src=""/> 
     </frameset> 
     <noframes>Your browser does not support frameset.</noframes> 
    </frameset> 
    </body> 
</html> 

내가 위의 문서를 처음 열 때 #leftFrame에 정의 된 자바 스크립트 함수를 호출하는 자바 스크립트 후크를 작성하는 것을 시도하고있다. 나는 Firebug 세션에서 jQuery과 함께이 작업을 수행하고있다.

jQuery ("# leftFrame")은 프레임 DOM 요소를 반환합니다. 이제 프레임의 컨텍스트에서 내 함수 (openLink, leftFrame.aspx의 일반 오래된 스크립트 태그에 정의 됨)를 실행하고 싶습니다. 내 이해는이 함수가 leftFrame의 document 요소 아래에있는 DOM 노드가 될 것이라는 점이다. 그러나 프레임의 문서를 가져올 수 없습니다.

이 나는 ​​시도했다 :

jQuery("#leftFrame").document 
jQuery("#leftFrame").contentDocument 
jQuery("#leftFrame").find("html") 

또한 나는 예상대로 내가 어떤 DOM 노드 아래에있는 오픈 링크 기능을 볼 수 없습니다 방화범에 DOM 트리를 검사 할 때.

아무도 도와 줄 수 있습니까?

답변

6
$('#leftFrame')[0].contentWindow.document 
$('#leftFrame')[0].contentWindow.functionName() 

위가 효과가 있습니다. jQuery의 contents()은 iframe 노드에서만 작동하므로이를 참조해야합니다.

+3

'contentWindow'는 HTML5까지 표준화되지 않은 IE 확장이며 다른 브라우저의 이전 버전에서 지원 문제가 있습니다. 일반적으로 긴 표준'contentDocument' 속성이있는 상태에서 먼저 코드를 분기하고 (관련 'window'를 얻기 위해'defaultView'를 사용하십시오), IE6-7의'contentWindow '로 떨어집니다. – bobince

관련 문제