Firefox XPCOM 구성 요소 - 통화 메소드에 대한 권한 거부되지 않은 클래스

StackOverflow https://stackoverflow.com/questions/127693

  •  02-07-2019
  •  | 
  •  

문제

Firefox XPCOM 구성 요소가 여러 페이지에서 페이지 컨텐츠를 읽고 쓸 수 있습니까?

시나리오 : 로컬 HTML 및 JavaScript 파일의 무리. "main.html"파일은 "PluginWindow"창을 열고 다음을 사용하여 플러그인을 만듭니다.

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

3 가지 방법이있는 플러그인.

IPlugin.Read - 플러그인에서 데이터를 읽으십시오
IPlugin.Write - 플러그인에 데이터를 작성하십시오
IPlugin.addObserver - 읽기를 위해 콜백 핸들러를 추가하십시오.

"main.html"은 플러그인 위도우로 호출하고 플러그인 메소드를 호출하려고합니다.

오류가 발생합니다.

Permission denied to call method UnnamedClass.Write

도움이 되었습니까?

해결책

첫째, C ++ 코드가 실제로 a입니다 플러그인 또는 XPCOM 구성 요소, 아마도 An의 일부로 설치 될 수 있습니다 확대? 나중에있는 것 같네요.

그렇다면 신뢰할 수없는 JS 코드 - 모든 웹 페이지 또는 로컬 HTML 파일에서 사용할 수 없습니다. 특권 코드에서 완전히 사용할 수 있으며 가장 일반적인 유형은 다음과 같습니다. 확대 암호.

이 문제를 해결할 때이 문제를 해결하고 있습니다. enablePrivilege('UniversalXPConnect') 전화. 이것은 사용자에게 배포되지 않는 한 실제로 권장되지는 않습니다 (이 호출은 혼란스러운 상자를 팝업하고 항상 파일을 허용하는 선호도를 설정하면 모든 로컬 로컬이 아니기 때문에 보안 문제가 될 수 있습니다. 페이지는 신뢰할 수 있습니다 - 저장된 웹 페이지를 생각하십시오).

당신의 Write 동일한 이유에 따라 통화 실패 - 파일 : // 페이지는 XPCOM 구성 요소를 사용하는 것이 신뢰하지 않습니다. 다른 것을 추가하면 작동하게 할 수 있습니다. enablePrivilege 쓰기 호출 자체와 동일한 기능으로 호출하십시오.

상황에 따라 더 나은 솔루션이있을 수 있습니다.

파일을 신뢰할 수있는 것으로 취급 해야하는 경우 연장으로 패키지하고 Chrome : // url을 통해 액세스 할 수 있습니다. 이는 해당 페이지의 코드에 귀하를 포함하여 XPCOM 구성 요소를 호출하도록 권한을 부여합니다.

구성 요소의 메소드가 모든 페이지에서 사용하기에 안전하거나 환경이 제어되고 브라우저에서 신뢰할 수없는 페이지가로드되지 않은 경우 구성 요소에 컨텐츠에 액세스 할 수 있도록 할 수 있습니다 (NSSISSIDEBAR를 검색하십시오. 모질라 코드 예를 들어, 또한 nsISecurityCheckedComponent).

아, 그리고 여기에서 좋은 답변을 얻지 못하면 Mozilla NewsGroups/Mailing Lists를 반드시 시도해야합니다.

주석에 대한 답장 편집] Chrome : // 스크립트에서 구성 요소를 호출하는 데 필요한 코드를 넣는 것을 고려하십시오. 또는 코드를 사용하여 크롬 권한으로 페이지를 "축복"할 수 있어야합니다. 이것 (크롬 특권을 제거하는 것이 필요한 것과 반대입니다).

다른 팁

main.html과 그 다른 창이 크롬으로 실행됩니까? Main.html "정상적으로"에 액세스하는 경우 Firefox의 위치 막대에 올리면 수행 할 수있는 작업에 제한이 있습니다 (그렇지 않으면 임의의 웹 페이지가 정확히 동일하게 수행 할 수 있음).

Firefox 플러그인을 작성하는 경우 코드를 XUL 오버레이에 배치하십시오.

웹 페이지가 플러그인이하는 모든 일을 수행하도록 허용하려면 페이지를 통해 일부 메커니즘을 설정하여 플러그인에 크롬 권한으로 작업을 수행하고 결과를 나중에 페이지로 보낼 수 있습니다.

당신이 Firefox 확장을하지 않는다면 ... 나는 무언가를 오해 한 것을 두려워합니다. 더 설명 할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top