복붙노트

[JQUERY] 파이어 폭스 확장에 jQuery를 사용하는 방법

JQUERY

파이어 폭스 확장에 jQuery를 사용하는 방법

해결법


  1. 1.나는 다음과 같은 example.xul을 사용합니다 :

    나는 다음과 같은 example.xul을 사용합니다 :

    <?xml version="1.0"?>
    <overlay id="example" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <head></head>
    <script type="application/x-javascript" src="jquery.js"></script>
    <script type="application/x-javascript" src="example.js"></script>
    </overlay>
    

    그리고 여기에 example.js입니다

    (function() {
        jQuery.noConflict();
        $ = function(selector,context) { 
            return new jQuery.fn.init(selector,context||example.doc); 
        };
        $.fn = $.prototype = jQuery.fn;
    
        example = new function(){};
        example.log = function() { 
            Firebug.Console.logFormatted(arguments,null,"log"); 
        };
        example.run = function(doc,aEvent) {
            // Check for website
            if (!doc.location.href.match(/^http:\/\/(.*\.)?stackoverflow\.com(\/.*)?$/i))  
                return;
    
            // Check if already loaded
            if (doc.getElementById("plugin-example")) return;
    
            // Setup
            this.win = aEvent.target.defaultView.wrappedJSObject;
            this.doc = doc;
    
            // Hello World
            this.main = main = $('<div id="plugin-example">').appendTo(doc.body).html('Example Loaded!');
            main.css({ 
                background:'#FFF',color:'#000',position:'absolute',top:0,left:0,padding:8
            });
            main.html(main.html() + ' - jQuery <b>' + $.fn.jquery + '</b>');
        };
    
        // Bind Plugin
        var delay = function(aEvent) { 
            var doc = aEvent.originalTarget; setTimeout(function() { 
                example.run(doc,aEvent); 
            }, 1); 
         };
        var load = function() { 
            gBrowser.addEventListener("DOMContentLoaded", delay, true); 
        };
        window.addEventListener("pageshow", load, false);
    
    })();
    

  2. 2.다음 솔루션은 가능한 컨텐츠 스크립트 파일에서 jQuery를 사용 할 수 있습니다 (1.5 타겟팅 애드온-SDK)

    다음 솔루션은 가능한 컨텐츠 스크립트 파일에서 jQuery를 사용 할 수 있습니다 (1.5 타겟팅 애드온-SDK)

    당신의 main.js에서 :

    exports.main = function() {
        var pageMod = require("page-mod");
    
        pageMod.PageMod({
              include: "*",
              contentScriptWhen: 'end',
              contentScriptFile: [data.url("jquery-1.7.1-min.js") , data.url("notifier.js") ,   data.url("message.js")],
              onAttach: function onAttach(worker) {
                 //show the message
                 worker.postMessage("Hello World");
              }
        });
    
    };
    

    당신의 message.js에서 :

    self.on("message", function(message){
        if(message !== "undefined"){
           Notifier.info(message); 
        }
    });
    

    일부 함정 당신은 조심해야합니다


  3. 3.이 단계별 설명 모질라 포럼에서 우수한 기사가있다 : http://forums.mozillazine.org/viewtopic.php?f=19&t=2105087

    이 단계별 설명 모질라 포럼에서 우수한 기사가있다 : http://forums.mozillazine.org/viewtopic.php?f=19&t=2105087

    내가 여기에 정보를 복제 주저 있도록하지만 나는 아직 그것을 시도하지 않았습니다.


  4. 4.@sunsean하여 현재 상위 답변을 끈다는 여러 부하를 처리하기에 올 때 예상대로 작동하지 않습니다. 이 기능은 제대로 가까운 문서를 통해 글로벌 상태를 피해야한다.

    @sunsean하여 현재 상위 답변을 끈다는 여러 부하를 처리하기에 올 때 예상대로 작동하지 않습니다. 이 기능은 제대로 가까운 문서를 통해 글로벌 상태를 피해야한다.

    또한, 당신은 정말 다른 부가 기능과의 충돌을 피하기 위해 (사실) jQuery.noConflict 전화를해야!

    이것은 내가 작성합니다 누구 (다시, 나는 ... 추가 기능) 전염병과 같은에서 (JQuery와 피할 것이다). 먼저 오버레이 XUL

    <?xml version="1.0"?>
    <overlay id="test-addon-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
      <script type="text/javascript" src="jquery.js"/>
      <script type="text/javascript" src="overlay.js"/>
    </overlay>
    

    그리고 오버레이 스크립트 :

    // Use strict mode in particular to avoid implicitly var declarations
    (function() {
      "use strict";
    
      // Main runner function for each content window.
      // Similar to SDK page-mod, but without the security boundaries.
      function run(window, document) {
        // jquery setup. per https://stackoverflow.com/a/496970/484441
        $ = function(selector,context) {
          return new jq.fn.init(selector,context || document); 
        };
        $.fn = $.prototype = jq.fn;
    
        if (document.getElementById("my-example-addon-container"))  {
          return;
        }
        let main = $('<div id="my-example-addon-container">');
        main.appendTo(document.body).text('Example Loaded!');
        main.click(function() { //<--- added this function
          main.text(document.location.href);
        });
        main.css({
          background:'#FFF',color:'#000',position:'absolute',top:0,left:0,padding:8
        });
      };
    
      const log = Components.utils.reportError.bind(Components.utils);
    
      // Do not conflict with other add-ons using jquery.
      const jq = jQuery.noConflict(true);
    
      gBrowser.addEventListener("DOMContentLoaded", function load(evt) {
        try {
          // Call run with this == window ;)
          let doc = evt.target.ownerDocument || evt.target;
          if (!doc.location.href.startsWith("http")) {
            // Do not even attempt to interact with non-http(s)? sites.
            return;
          }
          run.call(doc.defaultView, doc.defaultView, doc);
        }
        catch (ex) {
          log(ex);
        }
      }, true);
    })();
    

    여기에 완벽한 추가 기능 요지 등이다. 그냥 JQuery와의 사본에 드롭하고 갈 수 있어야합니다.


  5. 5.나는이 에릭 말했지만, 직접 URL에서 자바 스크립트를로드 할 수있는 일이라고 생각합니다.

    나는이 에릭 말했지만, 직접 URL에서 자바 스크립트를로드 할 수있는 일이라고 생각합니다.

    javascript:var%20s=document.createElement('script');s.setAttribute('src','http://YOURJAVASCRIPTFILE.js');document.getElementsByTagName('body')[0].appendChild(s);void(s);
    

    쉽게 페이지 요소를 조작 할 수 있도록 임 당신이 부하 JQuery와에 확장을 원하는 가정? http://parkerfox.co.uk/labs/pixelperfect : 우리 회사의 연구소를 직접 여기 사용하여 자바 스크립트를 않는 무언가가


  6. 6.그것은 나쁜 연습을 할 수있다, 그러나 당신은 인라인을 포함하여 고려 했는가?

    그것은 나쁜 연습을 할 수있다, 그러나 당신은 인라인을 포함하여 고려 했는가?


  7. 7.대신에

    대신에

    $('img',content.document);
    

    당신은 시도 할 수 있습니다

    $('img',window.content.document);
    

    내 경우에는 그것을 작동합니다.

  8. from https://stackoverflow.com/questions/491490/how-to-use-jquery-in-firefox-extension by cc-by-sa and MIT license