2012-07-14 5 views
1

이상한 메시지입니다. 내가 동적으로 자바 스크립트에서 만든 VML 개체의 컬렉션을했습니다. 내가 테스트하는 데 사용하는 시스템은 Windows XP (SP3)의 IE6입니다.VML이 마우스를 눌렀을 때 오류 발생 - '실패'

콜렉션에서 마우스를 아래로 누르면 "Failed"오류가 발생합니다. 정말 이상한 점은 VML을 한동안 사용 해왔다는 것입니다. 지난 주에이 오류가 발생하지 않았다고 맹세합니다.

어쨌든 여기에 오류를 보여주는 데모 링크가 있습니다.

http://www.codequark.com/vml-demo

오류는 다음과 같습니다

라인 : 25 문자 : 5 오류 : 실패 코드 : 0

사랑스러운. 나는 IE6를 사용하고 있지만, 7 또는 여기

8. 내가 찾을 수 있었어요이 오류에 가까운 무엇이든 할 수있는 유일한 참조입니다 무슨 일이 일어나고 있는지 알고 도움이 될 것입니다 :

http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/dfacff65-cd23-480f-a2e9-c928e63cb50f/

원한다면 여기에 소스 코드가 있습니다. 그것을로드하고 원하는 야만적 인 IE 브라우저에서 볼 수 있습니다.

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title></title>  
    <script type="text/javascript" charset="utf-8"> 


    //the stage element. 
    var stage;  

     //create a group with a single square shape. 
     function makeAScaledRotatedGroup(sclX, sclY, rot, clr) { 

     var xCoord = 200; 
     var yCoord = 200; 

     var regX = 100; 
     var regY = 100; 

     var origX = -10/sclX + regX; 
     var origY = -10/sclY + regY; 

     var _x = xCoord - 10; 
     var _y = yCoord - 10; 

     var grp = document.createElement('<v:group style="position:absolute; left:'+_x+'px; top:'+_y+'px; width:20px; height:20px; rotation:'+rot+';" coordsize="'+20/sclX+' '+20/sclY+'" coordorigin="'+origX+' '+origY+'" class="rvml">'); 

     var shp1 = document.createElement('<v:shape fillcolor="'+clr+'" strokecolor="red" strokeweight="2px" coordorigin="0 0" coordsize="20 20" style="position:absolute; top:0px;left:0px;width:20px;height:20px;" class="rvml">'); 
     var pth1 = document.createElement('<v:path v="M 0 0 L 200 0 200 200 0 200 X E" class="rvml">'); 

     shp1.appendChild(pth1); 
     grp.appendChild(shp1); 

     stage.appendChild(grp); 

     return grp; 
     } 


//array to store references to all the dom nodes. 
var allRects = []; 

    //kick it off. mon calamari cruisers beware. 
    function operationalBattleStation() { 

    document.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)"); 
    document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); 

    stage = document.createElement('div'); 
    stage.style.position = 'absolute'; 
    stage.style.top = '0px'; 
    stage.style.left = '0px'; 
    stage.style.width = '500px'; 
    stage.style.height = '500px'; 
    stage.style.clip = "rect(0px,500px,500px,0px)"; 
    document.body.appendChild(stage); 


    var clrs = ['#0066CC', '#990000','#FF0033','#0699CC','#00FF00','#0000FF','#FF0000','#33FF00','#333300', '#990000','#FF0033','#0699CC','#00FF00','#0000FF','#FF0000','#33FF00','#333300']; 
    var rot =0; 
    var scl = 1; 

     for(var h=0; h<clrs.length; h++) { 
     allRects.push(makeAScaledRotatedGroup(scl, scl, rot, clrs[h]));     
     rot+=10; 
     scl = scl*0.7; 
     } 

    }; 


</script></head><body onload="operationalBattleStation();"></body></html> 

어떤 도움

에 감사드립니다. 감사!

답변

1

오 주 이것은 책을위한 책입니다.

이 버그와 몇 가지 원인은 ... IE6의 내 버전에 설치된 "Reganam"이라고하는 일종의 툴바 추가 기능 때문입니다. 그것을 숨기면 문제가 해결되고 이제는 내 코드가 정상적으로 작동합니다.

제 이론은이 부가 기능이 IE6의 가비지 수집 시스템에 어떻게 든 영향을 미쳤다는 것입니다. VML 노드가 화면에 계속 나타나더라도 삭제 된 것과 같습니다. 다른 인스턴스에서 VML 요소의 window.event.srcElement는 해당 속성에 액세스하려고 시도하면 '실패'오류를 발생시킵니다. 그러나 srcElement가 null이 아닙니다. (해제 된 개체의 속성에 액세스하려고 할 때 objective-c가 동작하는 방식 만 작동합니다.) 추가 기능을 숨기면이 문제도 해결됩니다.

부가 기능이 VML을 방해하는 이유는 무엇입니까? (그런 간섭이 도 가능하도록 설계된 이유는입니다).

Reganam 추가 기능은 교차 브라우저 벡터 그래픽을 사용해야하는 사람들에게 나쁜 소식입니다. 더 많이 쓰고 싶지만 몇 가지 부두 인형을 만들 수 있습니다.

관련 문제