2009-08-18 10 views
0

특정 URL을 입력 할 때 catch하는 Firefox 확장 프로그램을 작성했으며 일부 기능을 수행합니다. 내 기본 응용 프로그램은이 URL로 Firefox를 실행합니다. URL에는 중요한 정보가 들어 있으므로 기록에 저장하지 않으려합니다.북마크릿에서 Firefox 확장자에 액세스하는 방법 (또는 그 반대로)

확장 프로그램이 설치되지 않은 경우가 걱정됩니다. Firefox가 설치되지 않았고 Firefox가 민감한 URL로 시작되면 역사에 저장되며 내가 할 수있는 일이 없습니다. 그래서 내 생각은 북마크릿을 사용하는 것입니다.

"javascript : window.location.href = 'pleaseinstallthisplugin.html'; sensitiveinfo = 'blahblah'"로 Firefox를 시작합니다.

확장 프로그램이 설치되어 있지 않은 경우 확장 프로그램이 설치되어 있다고 안내하는 페이지로 리디렉션되며 중요한 정보는 기록에 저장되지 않습니다. 이 설치된 경우 sensitiveinfo 변수의 정보를 가져 와서 작업을 수행합니다.

제 질문은 자바 스크립트가 북마크릿에서 호출 될 때 북마클릿이 중요한 정보를 전달하는 확장 프로그램의 메소드를 호출 할 수 있습니까?

북마크릿과 Firefox 확장 프로그램은 어떻게 통신 할 수 있습니까?

p.s. 이 상황을 극복하기위한 또 다른 방법은 Firefox를 실행하고 소켓을 사용하여 확장 프로그램과 통신하는 주요 응용 프로그램을위한 것이지만 미친 방화벽이 소켓을 차단하는 사용자에게 수년 동안 너무 많은 문제가 발생했기 때문에 그렇게하기가 싫습니다. 통신. 가능하다면 소켓없이 모든 것을하고 싶습니다.

답변

1

내가 아는 한, 북마크릿은 절대로 크롬 파일 (확장자)에 액세스 할 수 없습니다.

1

Bookmarklet은 현재 문서의 범위 내에서 실행되며, 거의 항상 내용 문서입니다. 명령 줄을 통해 그것을 전달하는 경우, 작동하는 것 같다 :이 허용되지 않은 경우 던질 것 Components 액세스

/Applications/Namoroka.app/Contents/MacOS/firefox-bin javascript:alert\(Components\)

하지만 경고는 적절한 객체를 표시합니다.

+0

Components 개체에 액세스 할 수 있지만 클래스 또는 QueryInterface()와 같은 개체의 유용한 메서드/속성에 액세스하려고하면 권한이 거부됩니다. 그래서 나는 그럴 수 없다고 생각합니다. – mhenry1384

1

unsafeWindow을 사용하여 전역 문자를 삽입 할 수 있습니다. 북마크릿은 전역 속성이 정의되어 있는지 여부 만 감지 할 수 있도록 단순한 속성을 추가 할 수 있지만 북마크가 아닌 컨텍스트의 사이트도 스니핑하지 못하도록하는 방법은 없다는 것을 알아야합니다. (사이트가 확장 기능을 사용하고 있는지 여부를 감지 할 수있는 개인 정보 보호 문제 일 수 있기 때문에) 나는 아래에있는 것과 비슷한 방식으로 전역을 주입하는 부가 기능을 북마크 릿과 일반 사이트 컨텍스트에서 작동한다는 것을 확인했습니다.

당신은 content-document-global-created이 주제이며, 다음 subject 포장을 푸는 곳 nsIObserver는, 예를 들어, 당신이 (당신이 방법과 객체와 같은 더 정교한 뭔가를 주입해야하는 경우 this 참조) 글로벌을 삽입 할 수 등록합니다.여기

트릭해야 할 몇 가지 (테스트되지 않은) 코드입니다 : 당신이 SDK에 분명히 쉬운 방법을 원하는 경우

var observerService = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService); 
observerService.addObserver({observe: function (subject, topic, data) { 

    var unsafeWindow = XPCNativeWrapper.unwrap(subject); 
    unsafeWindow.myGlobal = true; 

}}, 'content-document-global-created', false); 

thisthis 참조를 추가-에 (SDK postMessage 통신이 있을지 확실하지 대안으로 사용할 수 있지만 북마크가 아닌 컨텍스트 (예 : 일반 웹 사이트)에도 노출 될 수있는 것과 같은 우려가 있습니다.

+0

브렛 (Brett)을 공유해 주신 덕분에이 게시물을 좋아하지만 왜 주제를 관찰하기 위해'''document-element-inserted''가 아닌'''content-document-global-created''가 아닌가? – Noitidart

+0

이유가 없습니다. 아마도 더 좋을 것입니다 ... –

+0

Ah. 더 잘할 수있는 것처럼, 그것이 무엇을하는지 이해하도록 도와 줄 수 있습니까? 전 세계에서 만들어진 문서의 주제가 무엇인지 알고 있습니까? 정확히 뭐하는거야? 스크립트가 실행되기 전에 자바 스크립트를 설정합니까? document-element-inserted가 아직 실행되지 않았을 때, 그 시점에서 dom에 액세스조차 할 수 없습니다. 그리고 자바 스크립트를 삽입해야한다면 왜 옵저버를 사용해야하나요? 왜''''gBrowser.contentWindow.wrappedJSObject.myGlobal = true'''가 아닌가? – Noitidart