2012-09-06 3 views
0

사용자가 양식 요소를 마우스 오른쪽 단추로 클릭하고 해당 작업을 수행 할 수있게 해주는 ff 추가 기능을 개발하려고합니다.양식 입력을 위해 상황에 맞는 메뉴를 표시하십시오.

불행히도 누군가는 ff에서 긴 토론에도 불구하고 상황에 맞는 메뉴가 나타나지 않아야한다고 결정했습니다. https://bugzilla.mozilla.org/show_bug.cgi?id=433168, 그들은 여전히 ​​확인란, 라디오 또는 선택을 위해 나타나지 않습니다.

나는 이것을 찾았습니다 : https://developer.mozilla.org/en-US/docs/Offering_a_context_menu_for_form_controls하지만 새로운 애드온 SDK로 코드를 변환하는 방법을 생각할 수 없습니다. 콘텐츠 스크립트에 표시되는 자바 스크립트를 덤프하려고했지만 옵저버 서비스를 통해 표시했지만 아무 소용이 없습니다.

또한 권장 확장자 인 'https://addons.mozilla.org/en-US/firefox/addon/form-control-context-menu/'을 찾을 수 없습니다.이 방법을 '구체적으로 어떻게 만들 었는지 보여주기 위해 만들어졌습니다'라고 생각하면 상당히 실망 스럽습니다.

이것은 매우 기본적인 애드온 기능처럼 보이기 때문에보다 쉬운 문서에 대한 도움말이나 링크는 크게 감사하겠습니다.

** 내가 트릭을 할 것으로 보인다 주에서 필요한 파일에 다음 코드를 추가 한 **

UPDATE.

var {WindowTracker} = require("window-utils"); 

var tracker = WindowTracker({ 
    onTrack: function(window){ 
    if (window.location.href == "chrome://browser/content/browser.xul") {  
     // This is a browser window, replace 
     // window.nsContextMenu.prototype.setTarget function 
     window.setTargetOriginal = window.nsContextMenu.prototype.setTarget; 

     window.nsContextMenu.prototype.setTarget = function(aNode, aRangeParent, aRangeOffset) { 
     window.setTargetOriginal.apply(this, arguments); 
     this.shouldDisplay = true; 
     }; 
    }; 
    } 
, onUntrack: function(window) { 
    if (window.location.href == "chrome://browser/content/browser.xul") { 
     // In case we were called because the extension is uninstalled - restore 
     // original window.nsContextMenu.prototype.setTarget function 
     window.nsContextMenu.prototype.setTarget = window.setTargetOriginal; 
    }; 
    } 
}); 

불행히도이 기능은 비활성화 된 입력에 대한 상황에 맞는 메뉴를 표시하지 않지만이 점은 나에게 도움이되지 않습니다.

많은 감사

+1

언급 한 확장 프로그램의 소스는 웹에서 바로 볼 수 있습니다. 확장 프로그램의 페이지에서 '버전 정보'섹션까지 아래로 스크롤하여 확장 한 다음 확장에 대한 _ 소스 _ 링크보기를 클릭하십시오. 그런 다음 확장 프로그램의 소스 코드를 찾아 볼 수 있습니다. –

+0

고마워요. 불행히도 새로운 SDK 코드로 변환하면 잃어버린 부분입니다! – Arth

답변

2

이 확장 코드의 중요한 부분은 here를 볼 수 있습니다. 그것은 매우 간단합니다 - 각 브라우저 창에서 nsContextMenu.prototype.setTarget 기능을 대체하고 양식 컨트롤에 대해 shouldDisplay 플래그를 설정하는지 확인합니다.

이 기능을 Add-on SDK로 변환하는 유일한 문제는 고급 모듈이 브라우저 창에 직접 액세스 할 수 없다는 것입니다. 더 이상 사용되지 않는 window-utils 모듈을 사용해야합니다. 이런 식으로 뭔가 작업을해야합니다 : WindowTrackerreplaced in some future SDK version 있어야하는데

var {WindowTracker} = require("sdk/deprecated/window-utils"); 
var tracker = WindowTracker({ 
    onTrack: function(window) 
    { 
    if (window.location.href == "chrome://browser/content/browser.xul") 
    { 
     // This is a browser window, replace 
     // window.nsContextMenu.prototype.setTarget function 
    } 
    }, 

    onUntrack: function(window) 
    { 
    if (window.location.href == "chrome://browser/content/browser.xul") 
    { 
     // In case we were called because the extension is uninstalled - restore 
     // original window.nsContextMenu.prototype.setTarget function 
    } 
    } 
}); 

하는 것으로. 또한 참조 용 : nsContextMenu implementation

+0

이 도움에 많은 감사드립니다. 관심 있으신 경우 위의 편집을 참조하십시오! – Arth

+0

이제 작동하지 않습니까? 나를 위해 ... –

+0

@VitalyZdanevich : 추가 기능 SDK가 3 년 만에 많이 바뀌 었습니다. 내 대답이 바뀌었지만 다시 작동해야하지만 문제의 API는 사용되지 않습니다. –

관련 문제