2010-05-18 3 views
1

(이 포럼이 게시하기에 적합하지 않은 경우 실례합니다.이 항목은 비 네이티브 프로그래밍과 관련이 없으며이 주제와 관련이 없습니다)질문 - Windows Mobile 6.1 - Javascript를 사용하여 동적 HTML을 IE Mobile6으로 설정 - IE Mobile6

동적 인 HTML을 웹 페이지의 iFrame에 설정하려고합니다. 나는 두 가지 일을 시도했지만 그들 중 누구도 일하는 것 같지 않습니다. innerHTML 읽을 수 있지만 그것을 업데이트 할 수 없습니다.

// Able to read using 
document.getElementById('iFrameIdentifier').innerHTML; 

// On Desktop IE, this code works 
document.getElementById('iFrameId').contentWindow.document.open(); 
document.getElementById('iFrameId').contentWindow.document.write(dynamicHTML); 
document.getElementById('iFrameId').contentWindow.document.close(); 

이상적으로 같은 함수가 DIV의의 작동 방식으로 작동해야하지만 말한다 '(iFrameId') 객체는 "이 속성 또는 메서드를 지원하지 않습니다.

을 나는 또한 document.getElementById를 시도했다 ' .document.body.innerHTML.

이 분명히 페이지의 전체 HTML 만이 아니라 innerHTML을 바꿉니다. 내가 몇 가지를 시도하고 그들이

을 작동하지 않았다

5,

  • document.getElementById를 ('iFrameId'). body.innerHTML는
  • document.frames [0] .document.body.innerHTML

내 목적은 동적 HTML을 포함 할 수있는 컨테이너 요소를 가지고있다 그것은 그것에 설정되어 있습니다.

div의 설정 innerHTML이 동적 HTML의 앵커 및 이미지에 첨부 된 onclicks 또는 다른 JS 메서드 때문에 시간이 많이 걸리는 것을 보았을 때 지금까지 잘 사용 해왔다. JS 방법이 나타나거나 HTML은 일부 제대로 정리하기 어떻게하지

이 또한 논의되고 (메모리 누수?) - http://www.experts-exchange.com/Programming/Languages/Scripting/JavaScript/Q_26185526.html#a32779090

답변

0

그래, 이전에 직면했던 문제와 IEMobile에서 HTML을 iFrame으로 설정하는 더 큰 문제를 다소 해결했습니다. 그러나 나는 아직도 두 개의 scollbars와 관련된 PIA를 하나 더 가지고 있습니다. 비슷한 문제에 직면 해있는 가난한 영혼이있는 것처럼 보입니다. 나는 여기에 업데이트를 게시 할 것이다.

어떻게 마침내 IEMobile의 iFrame에 작성 했습니까? iFrame을 감싸는 2 개의 div와 iFrame 내부에 쓰는 다른 2 개의 div가 있습니다.

document.getElementById('OuterDiv').innerHTML = ''; 
document.getElementById('OuterDiv').innerHTML = '<iframe id="iFrameId" src="somefile.html"></iframe>'; 

이 각 시간은 iframe을 생성하고 부하에 somefile.html에서 메모리 누수가 보이지 않는 InnerDiv.innerHTML있다. somefile.html에서

이 (내가 그걸 얻기 위해 관리 방법에 대한 아래 설명) HTML을 가져올 것에 onLoad 방법이어야하며

document.getElementById('InnerDiv').innerHTML = dynamicHTML; 

가 어떻게 HTML을 전달하는 관리 않았다 할 것 부모와 자식 사이 iFrame 이전에 @bobince도 잘 설명했듯이 부모와 자식 iFrame간에 데이터를 전달하기 위해 쿠키 또는 서버와 같은 타사 서비스에 의존해야합니다.

사실상 ActiveX 컨트롤을 사용하여 부모 및 자식 iFrame의 자바 스크립트에서 데이터를 설정하고 가져 왔습니다. 이 작업을 위해 ActiveX 컨트롤을 도입해야하는 경우에는이 작업을 수행하지 않는 것이 좋습니다. 실수로 이미 동적 HTML을 가져 오는 데 사용하는 템플릿이 있습니다.

당신은 당신이 나를 DM 수있는 도움이 필요한 경우 - 트위터 @Swaroop

감사 @bobince 당신의 도움을. 내가이 문제를 해결하기 위해 무엇을했는지에 대한 대답으로이 글자를 표시하고있다.

0

나는 몇 가지를 시도했지만 그들 중 누구도 제대로 작동하지 않습니다.

IEMobile에 오신 것을 환영합니다. DOM 스크립팅에 대해 알고있는 것은 여기에 적용되지 않습니다.

불행히도 IEMobile6-7에서는 교차 iframe 스크립팅이 불가능합니다.

  • frameelement.contentDocument (표준 DOM 방법)을 사용할 수 없습니다
  • frameelement.contentWindow.document
  • 합니다 (IE6-7 해결 방법 버전)를 사용할 수없는 오래된 학교 넷스케이프 window.frames 배열은 프레임이 아닌 iframe을 작동
  • 은 자식 문서가 document 인 객체를 window.parent에 전달하면 iframe이 아닌 프레임에서만 작동합니다. iframe, window.parent===window.

그래서 내가 볼 수있는 앞으로 유일한 방법은 다음과 같습니다

  1. 프레임을 사용하는 대신 iframe을. 추잡한.또는
  2. 부모와 자식간에 통신하는 데 document.cookie을 사용하십시오. 하위 문서는 폴러의 document.cookie에있는 특정 쿠키를 검사하고 부모로부터의 메시지 인 것으로 확인되면 일부는 쓸 수 있습니다 HTML 또는 뭐든간에. 천천히 그리고 더러운. 또는
  3. 서버 측에서 프레임에 내용을 주입하여 스크립트의 인수로 전달합니다. 천천히, 불쾌하고 잠재적으로 불안정합니다. 또는
  4. 프레임을 완전히 피하십시오 (최대한 좋습니다). 또는 IEMobile6-7에서
  5. 드롭 지원 (당신이 멀리 얻을 수 있다면, 당신의 정신을 보존하기 위해! 최고)

JS 방법이 나타나거나 HTML은 몇 가지 방법하지 제대로 정리지고 (메모리 누수?)

예. IEMobile6-7 (*)은 동적 HTML에서 사용할 수 없습니다. 그것은 넷스케이프에서 4 일 동안 우리에게 돌아가는 가난한 녀석들에게 스크립트가 사용했던 것과 같은 멋진 맛을줍니다.

많은 노드와 이벤트 처리기를 만들고 파괴하지 않도록하십시오. 가능한 경우 요소 노드를 다시 사용하고 텍스트 노드 데이터 속성을 설정하여 모든 내용을 찢어 내고 createElement 또는 innerHTML으로 새로 작성하는 것보다 페이지를 가능한 정적으로 유지하십시오. HTML에서 이벤트 스텁 (onclick="return this._onclick()")을 사용하고 _onclick으로 작성하는 경우 JavaScript에서 이벤트 핸들러를 설정해야합니다. 새 이벤트 핸들러로 HTML을 다시 작성하는 것이 좋습니다 (물론 속성을 설정하려고합니다. IEMobile에서의 작업). 가능한 한 오래 실행하는 단일 페이지를 피하십시오.

아직 충돌 할 것이지만 잘하면 시간이 오래 걸릴 것입니다.

* : "Internet Explorer Mobile 6"(Microsoft에 감사드립니다)으로 판매되는 무한히 향상된 IEMobile8이 된 버전 6.1.4 이전의 WinMo에있는 IE의 버전입니다.

+0

"HTML에서 이벤트 스텁 (onclick ="return this._onclick() ")을 사용하면 JavaScript에서 이벤트 처리기를 설정해야하는 경우 _onclick에 쓰는 것과 함께 HTML을 다시 만드는 것이 좋습니다 새로운 이벤트 처리기로 (또는 단지 IEMobile에서 작동하지 않는 속성을 설정하려고합니다.) 나는 당신이 내가 무엇을 바꾸라고 요구하는지 정확히 모르겠다. 일반적으로 onClick 속성을 사용하여 태그 또는 이미지를 고정시킵니다. 또한 텍스트 상자 및 텍스트 영역 등의 입력 요소에 onChange()가 있습니다. – Swaroop

+0

내가 말하고자하는 것은 IEMobile에서 JavaScript의 이벤트 처리기 속성을 작성할 수 없다는 것입니다. 'document.getElementById ('x ') .onclick = somefunction'. 'click' 이벤트에 첨부 할 수있는 유일한 방법은 HTML의 실제 인라인 이벤트 핸들러를 사용하는 것입니다 (예 : ). 이것은 일반적으로 두려운 관행이며, HTML을 다시 생성하지 않고 이벤트 핸들러를 변경할 수 없음을 의미합니다 (따라서 메모리 누수). 자바 스크립트에서 쓸 수있는'_onclick' 속성으로 전달하는 스텁'onclick' 속성을 사용하면 문제가 발생하지 않습니다. – bobince

+0

이제 스텁 구현을 이해합니다. 하지만 나는 onClick() 속성뿐만 아니라 전체 HTML (동적)을 매번 대체하고 있습니다. 나는 스텁을 사용하여 포인터를 연결 해제하는 것과 같은 JS 구현에서 사용되는 메모리를 지우는 방법으로 스텁 구현을 지울 수있다. 하지만 동일한 페이지에서 동적 HTML을 사용하는 주된 이유 중 하나는 매번 자바 스크립트를 다시로드하지 않는 것입니다. JS 구현은 한 번로드되고 동적 HTML은 여러 번 사용합니다. – Swaroop