2008-09-24 2 views
2

Firefox XPCOM 구성 요소가 여러 페이지에서 페이지 내용을 읽고 쓸 수 있습니까?Firefox XPCOM 구성 요소 - 호출 메서드가 허용되지 않음 권한 클래스

시나리오 : 한 묶음의 HTML 및 javascript 파일. A "Main.html"파일은 윈도우 "pluginWindow"를 열고, 사용하는 플러그인 작성 3 가지 방법이있다

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var obj = Components.classes[cid].createInstance();
plugin = obj.QueryInterface(Components.interfaces.IPlugin);
plugin.addObserver(handleEvent);

플러그인을.

IPlugin.Read - 플러그인
IPlugin.addObserver에 데이터를 쓰기 - -
IPlugin.Write 플러그인에서 데이터를 읽고 독서에 대한 콜백 핸들러를 추가합니다.

"Main.html"은 pluginWindow를 호출하고 플러그인 메소드 Write를 호출하려고 시도합니다.

Permission denied to call method UnnamedClass.Write

+0

이 "C++"에 정말로 태그를 추가 하시겠습니까? 아마도 "자바 스크립트"는 더 나은 적합성이 될 것입니다 ... 실제 질문이 간다면 미안하지만 전혀 모르겠습니다. ( –

+0

C++ 플러그인이기 때문에 나는 C++로 태그를 지정 했으므로 희망적으로 대답 할 수 있습니다. C++ 솔루션 –

답변

1

첫 번째로 C++ 코드는 실제로 plugin 또는 XPCOM component이며 extension의 일부로 설치되었을 가능성이 있습니까? 소리가 나중 인 것 같아.

그렇다면 신뢰할 수없는 JS 코드 (웹 페이지 또는 로컬 HTML 파일)에서 사용할 수 없습니다. 권한이 부여 된 코드에서 완벽하게 사용할 수 있습니다. 가장 일반적인 유형은 extension 코드입니다.

enablePrivilege('UniversalXPConnect') 호출을 사용하여 구성 요소를 만들 때이 문제를 해결하고 있습니다. 이 호출은 혼란스러운 상자를 띄우고, file : // scripts가 항상 XPCOM을 사용하도록하는 환경 설정을 설정하면 보안 문제가 될 수 있습니다. 모든 로컬이 아니기 때문에 이것은 실제로 권장되지 않습니다. 페이지는 신뢰할 수 있습니다 - 저장된 웹 페이지를 생각하십시오).

Write 같은 이유로 파일 호출이 실패합니다. file : // 페이지는 XPCOM 구성 요소를 사용하도록 신뢰할 수 없습니다. 쓰기 호출 자체와 동일한 기능으로 다른 enablePrivilege 호출을 추가하면 작동 할 수 있습니다.

상황에 따라 더 나은 해결책이있을 수 있습니다.

파일을 신뢰할 수있는 파일로 처리해야하는 경우 파일을 확장명으로 패키지화하고 chrome : // URL을 통해 액세스 할 수 있습니다. 이렇게하면 해당 페이지의 코드에 사용자 코드를 포함하여 XPCOM 구성 요소를 호출 할 수있는 권한이 부여됩니다.

브라우저에서 구성 요소의 메서드를 안전하게 사용하거나 환경이 제어되고 신뢰할 수없는 페이지가로드되지 않으면 내용에 액세스 할 수있는 구성 요소를 만들 수 있습니다 (예를 들어 mozilla code에서 nsSidebar를 검색하고 nsISecurityCheckedComponent).

아, 그리고 여기서 좋은 대답을 얻지 못하면 mozilla 뉴스 그룹/메일 링리스트를 반드시 시도해야합니다.

[코멘트에 대한 답장 편집] 구성 요소를 호출해야하는 코드를 chrome : // 스크립트에 넣는 것을 고려해보십시오. 또는 this과 같은 코드를 사용하여 크롬 권한으로 페이지를 "축복"할 수 있어야합니다 (크롬 권한을 벗겨내는 것과 반대입니다).

+0

사실 C++ 코드는 실제로 XPCOM 구성 요소이며, 페이지는 사용자 정의 프로토콜에서 반환되며, 그들은 항상 안전합니다. nent는 프로토콜 처리기에서 반환 된 페이지의 컨텍스트에서만 안전합니다. –

+0

(답변 본문에 회신. 의견은 300 자로 제한됩니다 ...) – Nickolay

1

합니까 Main.html와 크롬 권한으로 실행 다른 창

나는 오류가 발생? Main.html에 "일반적으로"액세스하면 Firefox의 위치 표시 줄에 넣기 만하면됩니다. 그렇지 않으면 임의의 웹 페이지가 똑같이 할 수 있습니다.

파이어 폭스 플러그인을 만드는 경우 코드를 XUL 오버레이에 넣으십시오.

플러그인이 무엇이든간에 어떤 웹 페이지도 실제로 허용하려면 페이지에서 플러그인에 크롬 권한으로 작업을 요청하고 결과를 페이지로 보낼 수있는 방법을 설정할 수 있습니다 나중에.

만약 당신이 파이어 폭스 확장 기능을 사용하지 않는다면 ... 나는 오해를하는 것이 두렵다. 더 설명 할 수 있겠는가?

+0

크롬 권한으로 main.html을 실행합니까 : 아니요 내 코드를 XUL 오버레이에 배치하는 것에 대해 무엇을 의미하는지 모르겠습니다 코드는 네이티브 C++입니다 컴파일 된 dll은 firefox/components 디렉토리에 있으며 main.html의 javascript가 생성 될 때로드됩니다. XUL 오버레이를 조사하고 있습니다. 감사합니다! –

관련 문제