질문/조언질답게시판

<iframe id="iframe_1" src="test.com/index" />

 

<script>

 

function test() {

 

$("#iframe_1").contents().find("#testselect option:contains('과일')").prop("selected",true).change();

 

};

 

</sciprt>

 

 

뭐.. 대충 이렇게 짜여져있습니다.

 

test()를 실행하게되면, iframe_1 안에 select 옵션값은 과일로 변경은 됩니다.

다만, iframe 안이라서 그런지 저 명령을 보내게되면 옵션은 과일로 바뀌나 프레임 안에 on change event는 작동되고 있지 않습니다.

 

혹시몰라 iframe이 아닌 src 지정된 test.com/index 에 접속하여 $("#testselect option:contains('과일')").prop("selected",true).change(); 를 하니까 정상적으로 change event 가 작동이 되더군요..

 

위 방법에 대해 iframe을 쓰더라도 객체를 변경했다라는 감지를 줘서 프레임 안에 on change로 전달할 수 있는 방법이 있을까요?

 

 

p.s) 참고로 src주소의 script를 보면 onclick 함수가 아닌 $("#testselect").onchange(function.. 으로 되어있습니다.

  • profile

    값을 가져오는거나 이런게 구글에서는 iframe 안에 있더라도 로딩이 완료된 이후라면 가져올 수 있다는 내용으로 되어잇는데
    만약......

    iframe 속 내용이 ajax으로 불러와지는 형태가 아니라 페이지 소스내용과 불러온 html 이 전혀 변화가 없다면 해당 안에 있는 내용을 충분히 조작이 가능할 것으로 보여집니다.

    정확한건 내부 iframe과 외부페이지에서 로딩한 값들이 어떻게 처리되었는지 왜 찾을 수 없는지 직접 내부에서 확인해봐야할 문제인것 같은데.. 이 부분에서 console.log 와 같은 방법으로 코드내에서 해당 엘리먼트들을 찾아봤을때 어떤값들이 리턴되는지..

    그리고 님의 코드가 어떤지 확인할 수 있는 url은 어떤것인지 등등 자세한 정보가 있으면 좋을 것 같은데.. localhost에 접속은 못할거고 코드 공개도 어려우신가요? (위의 코드로는 확인이 불가능하니..)

  • profile ?
    iframe안에 객체들을 변경하고 val혹은 text값은 충분히 contents.find를 통해 접근이 가능합니다..

    그래서 값을 불러오는건 당연하지만 여기서 문제는

    iframe안에 select option도 변경하고 추가하고 다 할 수 있지만 그 select option값이 변경되면 이벤트가 발생되어 옆에있는 select option이 추가되는 이벤트가 작동하지 않은 것 뿐입니다.. 근데 웃긴건 프레임속 페이지를 열어서 change구문을 쓰면 이벤트가 정상적으로 처리가 되더라고요..? 근데 다른 페이지에서 iframe으로 내부 이벤트 처리가 안되는게 문제인것 같습니다
  • ? profile
    iframe 자체가 내부적인 브라우저로 볼 수 있기 때문에 iframe내에서 내부적으로 뭔가 변경 처리된 부분이 iframe밖의 jQuery가 인식못할 수 있습니다..
  • profile ?
    https://stackoverflow.com/questions/12032074/triggering-an-event-handler-on-an-element-inside-iframe-from-parent-frame/19812589

    document.getElementById('ifrmMsg').contentWindow.$('a:first').trigger('click');

    찾았습니다 ㅎㅎ