Почему мое расширение Firefox не добавляет обработчики событий, использующие объект jQuery 1.4.2, извлеченный из веб-страницы в Firefox 4 - PullRequest
1 голос
/ 23 марта 2011

Мое расширение Firefox захватывает объект jQuery 1.4.2, который уже встроен в веб-страницу, а затем пытается использовать этот объект jQuery для изменения этой страницы. Он хорошо работал в Firefox 3.x, но, похоже, не работает в Firefox 4.

Вот мой код:

window.addEventListener("load", function() { MyExt.init(); }, false);  

var MyExt = {

  targetHost: "somewebsite.com",

  init: function() {     
     var appcontent = document.getElementById("appcontent");   // browser  
     if (appcontent){  
      appcontent.addEventListener("DOMContentLoaded", MyExt.onPageLoad, true);  
     }
   },

   onPageLoad: function(aEvent) {  
     var doc = aEvent.originalTarget; // doc is document that triggered "onload" event  
     var loc = doc.location;
     var host = '';
     if (loc.toString() != "about:blank") {
       host = doc.location.host;
     }


     // Edit page         
     if (host == MyExt.targetHost) {
        var $ = doc.defaultView.wrappedJSObject.$;

        // this works
        $('p').css('color', 'green');

        // this works in Firefox 3.x, but does not work in Firefox 4
        // instead it shows the following error:
        // "Error: uncaught exception: TypeError: handler is undefined" 
        $('.sometextarea').keyup(function(event) { alert('it should work, but does not'); });

        // even this does not work as expected
        // it should display true, but it displays false
        alert($.isFunction(function(){}));

     }
 }

Что я делаю не так?

1 Ответ

0 голосов
/ 06 сентября 2012

Да, вы должны использовать wrappedJSObject из-за изменений API :

Указание xpcnativewrappers = no в вашем манифесте (то есть автоматизация XPCNativeWrapper) больше не поддерживается,Это всегда предполагалось в качестве краткосрочного обходного пути, чтобы позволить расширениям продолжать работать, пока их авторы обновляли свой код для использования XPCNativeWrappers.

Если ваше дополнение зависит от привязок XBL, прикрепленных к объектам контента, например,возможность вызывать функции или получать и устанавливать свойства, созданные привязкой XBL, - вам нужно использовать свойство XPCNativeWrapper wrappedJSObject для доступа к обернутым объектам.

Если вам нужно вызывать функции или обращаться к определенным свойствампо веб-контенту, вам нужно будет сделать и это.Это может быть в том случае, если, например, вы написали расширение, которое добавляет кнопку удаления в службу веб-почты, и эта служба определяет функцию window.delete (), которую нужно вызвать.

Если, с другой стороны, все, что вы делаете с контентом, - это доступ к методам и свойствам DOM, вам никогда не нужно было использовать xpcnativewrappers = no, и вам просто нужно удалить его из манифеста.

...