2009-10-22 1 views
1

저는 100 % 확신 할 수없는 질문이 있습니다. 제가이 일을하는 가장 좋은 방법에 대해 너무 확신하고 있습니다. 그래서 제가 (단순화 된 예를 사용하여) 무엇을하려고하는지 설명하고, 거기에서 갈거야.IE VBScript HTC 동작 - 모든 동작 인스턴스 간의 정적 변수?

당신은 임의의 HTML 요소 (IMG, A, TD, 뭐든간에)가 있습니다. 하지만 - - 그들이 정상적인 테두리 이전에 선택한 요소를 설정해야 는 CSS를 통해 사람들은 HTML 동작

.BoldSelection { 
    behavior: url(SelectBold.htc); 
    border: thin solid black; 
} 

행동이 단순히 클릭 할 요소 주위에 두꺼운 테두리를 둔다에게 할당됩니다.

그래서 여기에 HTC 소스가 있습니다. 이 동작은 모든 동작 인스턴스간에 CurrentlyFocusedElementID가 정적 인 경우 작동합니다. 그러나 그렇지 않습니다.

<Public:Attach Event="onContentReady" onEvent="LoadInit" /> 

    <Script Language="VBScript" type="Text/VBScript"> 

     Sub LoadInit 
      element.onClick = getRef("setFocusedElement") 
     End Sub 

     Sub setFocusedElement 
      set ele = document.getElementByID(CurrentlyFocusedElementID) 
      ele.style.border = "thin solid black" 
      CurrentlyFocusedElementID = element.id 
      element.style.border = "thick solid black" 
     End Sub 

    </Script> 

가 나는 또한 ... 내가 임의의 속성을 저장하거나 포함되어있는 문서의 DOM에서 속성 수 있다면 그때가 마지막 활성 요소를 찾기 위해 공통의 장소로 그것을 사용할 수 있다고 생각 슬프게도 나는 알아낼 수 없습니다 일종의 해킹 (예 : 신체의 클래스 값 하이재킹)을 사용하지 않고 그렇게 할 수있는 방법을 찾으십시오.

나는 HTC 안에 모든 코드를 포함하고 싶습니다. 이 방식으로 모듈 방식을 사용하는 것을 좋아합니다. CSS 동작과 콜백을 할당 할 수있는 방식으로 부모 속성이 없습니다. 선언 할 HTML 구성 요소가 없습니다.

어떻게하면 되겠습니까?

미리 감사드립니다.

+1

코드를 완료, 고의적 나이가 있다는 사실에도 불구하고, 우리가 아직 기업의 세계에서 IE6를 죽일 수 없었던 이유는, IE에서만 작동하도록 설계 iPod보다. 좋은 브라우저를 잠그지 않는 IE 용 앱을 작성하는 것은 전적으로 가능합니다. 부끄러운 줄 알아라! –

+0

음, 조엘 - 나는 진심으로 당신과 동의합니다. 그러나 모든 것과 마찬가지로 - 그것을위한 장소가 있습니다. 저는 이것을 HTML 응용 프로그램 개발에 사용하고 있습니다. 기업 표준은 IE입니다. 다른 브라우저는 없습니다. 이것은 웹 서버에서 호스팅되지 않습니다. EXCEPT IE를 위해 아무 것도 쓸 필요가 없습니다. – Yesurbius

+0

예,하지만 VBScript에없는 IE 용 코드를 작성할 수 있으며 동작에 의존하지 않았습니다. 그런 다음 회사의 마음을 바꿀 수있는 능력을 빼앗기지 않고 회사 표준을 준수합니다. MS는 처음 HTC 동작을 발명했을 때 W3C에 HTC 동작을 제출했습니다. W3C가 IE9를 거부했기 때문에 IE9가 행동 지원을 중단한다면? IE 전용 상점에서도 표준을 고수하면 장기적으로 회사 비용을 절약 할 수 있습니다. –

답변

1

퍼즐 조각이 누락되었습니다. 사용자 정의 임의 속성. 다음은이 같은하며 .htc

<Public:Attach Event="onContentReady" onEvent="LoadInit" /> 

    <Script Language="VBScript" type="Text/VBScript"> 

    ' This is an example HTC only. If we were only setting borders, it'd make more sense to store 
    ' the previous element's border type and keep the rest of the formatting. For simplicity we are 
    ' swapping out the class name 

    Sub LoadInit 

     ' No ID defined for this element. Highlight it for the developer 
     If element.id = "" Then 
     element.style.bordercolor = "rgb(200,50,10)" 
     element.style.borderwidth = "thin" 
     element.style.borderstyle = "dashed" 
     Exit Sub 
     End If 

     ' Attach our Click Events 
     element.onClick = getRef("BoldIt") 
     element.onDblClick = getRef("BoldItMore") 

    End Sub 


    ' Changes the Class Name for the current element, and if a previously 
    ' selected element exists, restore its original classname 
    Sub changeClass(newCSSClass) 
     ' Storing the Expando on the document.body element 
     Set ele = window.document.body 

     ' Retrieve our two custom attributes - the ID of the element, and what its original ClassName was. 
     LastEle = ele.getAttribute("LastHighlightedEle") 
     LastEleClass = ele.getAttribute("LastHighlightedEleClass") 

     ' If there was in fact a previously selected element - restore the classname 
     If not isnull(LastEle) then 
     set oldEle = window.document.getElementByID(LastEle) 
     oldEle.className = LastEleClass 
     set oldEle = Nothing 
     End If 

     ' Set our two custom attributes to this element and adjust this element's CSS ClassName 
     LastEle = element.id 
     LastEleClass = element.className 
     ele.setAttribute "LastHighlightedEle",LastEle 
     ele.setAttribute "LastHighlightedEleClass",LastEleClass 
     element.className = newCSSClass 
    End Sub 

    ' Single Click Event - 'Thick' is a CSS Style for a 3px border 
    Sub BoldIt 
     changeClass("Thick") 
    End Sub 

    ' Double Click Event - 'Thicker' is a CSS Style for a 4px border 
    Sub BoldItMore 
     changeClass("Thicker") 
    End Sub 

    </Script>