2011-08-04 3 views
0

IE의 웹 페이지에서 사용되는 사용자 지정 ActiveX 컨트롤이 있습니다. 그것은 잘로드하고이 같은 OBJECT 태그를 통해 그것을로드하는 경우 자바 스크립트가 페이지에서 실행에 액세스 :ActiveX로드 메서드 차이점

<object id="ccl" codeBase="ccl.cab" classid="CLSID:12372D58-F10C-11CF-B7A9-0020AFD6A362" NOEXTERNALDATA="true"></object> 

을하지만이 같은 새로운 ActiveXObject()를 통해로드하려고하면 :

var x = new ActiveXObject('myObj.abc'); 

"자동화 서버에서 개체를 만들 수 없습니다."오류가 발생합니다.

ActiveX 컨트롤이 이미 설치된 경우 문서를로드하는 두 가지 방법이 동등하다고 생각했습니다. 그러나 분명히 그들은 그렇지 않습니다. 누구든지 새 ActiveXObject 메서드가 실패하는 동안 OBJECT 태그 메서드가 성공할 수있는 조건을 이해할 수 있습니까? 나는 새 ActiveXObject()로 전달되는 progID가 올바른지 두 번 확인하고 HKEY_CLASSES_ROOT \ CLSID 아래에 레지스트리에 나타나야합니다. 어떤 아이디어라도 미리 감사드립니다.

답변

0

이전 답변을 제출해 주셔서 감사합니다. 그들은 내 문제에 대한 해결책을 제시하지는 못했지만, 답을 찾기 위해 올바른 길로 나를 설정했습니다.

문제는 내 ActiveX 컨트롤이 Microsoft의 SiteLock 템플릿 (IObjectSafetySiteLockImpl)에서 제공하는 IObjectSafety 구현을 사용한다는 것입니다. SiteLock 설명서를 상태로 :

당신이 (대신에 태그를 사용하는) 스크립트를 통해 ActiveX 컨트롤을 작성하는 경우, 다음 스크립팅 호스트는 브라우저를 사이트를 설정하고 있지 책임이있다.그런 식으로 사이트 잠금 컨트롤을 만들 수 없으므로 JavaScript와 VBScript 엔진 모두 안전하지 않다고 결정할 때까지 사이트를 설정하지 않습니다.

이 경우에 SiteLock 기능이 필요하지 않은 내 ActiveX 컨트롤, 그래서 나는 IObjectSafey (IObjectSafetyImpl)의 표준 ATL 구현과 IObjectSafetySiteLockImpl을 교체했다.

0

지원 링크를 찾을 수 없지만 새로운 ActiveXObject()로 만든 컨트롤에서 이벤트를 시작할 수있는 IE (적어도 이전 버전의 6 및 7)는 허용되지 않습니다. 다른 차이점이있을 수 있습니다 ... 내부적으로 IE에서 코드 경로가 매우 다릅니다. 나는 완전한 가이드를 모른다.

SetSite() 메서드에 중단 점을 설정하여 호출되는지 확인할 수 있습니다. 또한 등록이 올바른지 확인하십시오.

0

object 태그 또는 ActiveXObject로 만든 개체에서 생성 된 개체의 시작이 다릅니다. 생각할 때 창을 그리지 않아도됩니다. 그대로 hinted here object 태그는 컨트롤을 IObjectWithSite (mshtml.dll에 의해)로 인스턴스화하는 반면 새 ActiveXObject는 IOleObject (jscript.dll에 의해)로 인스턴스화합니다.

ActiveXObject를 사용하면 SetSite is called이고 개체 태그가 SetClientSite is called 인 것을 의미합니다. 또한 IPObjectistPropertyBag 호출이나 ActiveXObject를 사용하는 InPlaceActivate 등의 호출을받지 못합니다.

필자가 링크 한 FireBreath 소스 코드에서 볼 수 있듯이,이 두 가지를 모두 지원하는 컨트롤을 작성할 수 있습니다.

보다 자세한 설명 (이해가 더 좋은 사람의 답변) can be found here.

+0

답장을 보내 주셔서 감사합니다. 나는 2 가지 경우가 너무 다르다는 것을 깨닫지 못했지만, 당신이 지적했듯이, 그들은해야만합니다. 불행히도 나는 아직도 IE가 ActiveXObject의 컨트롤에서이 에러를 던지는 이유를 알 수 없다. 내 컨트롤이로드되고 IOleObject :: GetClientSite가 호출되는지 확인했습니다. 그런 다음 오류가 표시됩니다. – BradVoy

+0

더 많은 중단 점을 설정하십시오. 그것이 어디에 들어가는지 알아 내고, 예외가 던져지는 곳을 알아 내라. 모든 예외를 위반하도록 설정하십시오. 우리가 문제가 무엇인지 말할 수있는 방법은 없습니다. 왜냐하면 그것은 많은 것들이 될 수 있기 때문입니다. – taxilian

관련 문제