Firefox 확장자에서 페이지 정의 된 JavaScript 함수를 어떻게 실행합니까?

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

문제

데모 목적으로 Firefox 확장을 만들고 있습니다. 확장자에서 문서에서 특정 JavaScript 함수를 호출합니다. 나는 이것을 내 HTML 문서에 썼다 (내부 확장자가 아니라 Firefox가로드하는 페이지) :

document.funcToBeCalled = function() {
   // function body
};

그런 다음 일부 이벤트에서 확장이이를 실행합니다.

var document = Application.activeWindow.activeTab.document;
document.funcToBeCalled();

그러나 그것은 그렇게 말하는 오류가 발생합니다 funcToBeCalled 정의되지 않았습니다.

참고 : 전화를 통해 문서에 요소를 얻을 수 있습니다. document.getElementById(id);

도움이 되었습니까?

해결책

보안상의 이유로 확장에서 컨텐츠 페이지에 대한 액세스가 제한되어 있습니다. 보다 xpcnativeWrapper 그리고 Chrome에서 콘텐츠 dom에 안전하게 액세스하십시오,

페이지를 제어하면이 작업을 수행하는 가장 좋은 방법은 페이지에서 이벤트 리스너를 설정하고 확장자에서 이벤트를 발송하는 것입니다 (페이지의 addeventListener, Extension의 DispatchEvent).

그렇지 않으면 참조하십시오 http://groups.google.com/group/mozilla.dev.extensions/msg/bdf1de5fb305d365

다른 팁

document.wrappedJSObject.funcToBeCalled();

이것은 안전하지 않습니다 악의적 인 페이지가 연장의 권한을 높이도록 허용합니다. 그러나 그것은 당신이 요청한 것을 수행합니다. 일찍 읽으십시오 Greasemonkey 취약점 왜 이것이 나쁜 생각인가.

나는 그것을 할 수있는 매우 간단한 방법이 있습니다. 페이지에 작성된 xyz () 함수를 호출해야한다고 가정하십시오. 그리고 당신은 당신의 플러그인에서 그것을 호출해야합니다.

버튼을 만듭니다 ( "보이지 않게하십시오. 따라서 페이지를 방해하지 않습니다"). 해당 버튼의 on Click 에서이 xyz () 함수를 호출하십시오.

<input type="button" id="testbutton" onclick="xyz()" />

이제 Pluggin에 페이지의 문서 개체가 있습니다. Maindoc이라고 가정하십시오

xyz ()를 호출하려는 곳 에서이 줄을 실행하십시오.

mainDoc.getElementById('testbutton').click();

xyz () 함수를 호출합니다.

행운을 빕니다 :)

할 수는 있지만 페이지를 제어하고 스크립트의 권한 수준을 높일 수 있어야합니다. 모질라 문서는 예를 제공합니다 - 페이지에서 "권한"을 검색하십시오.

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