Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的Firefox扩展不使用从Firefox4的网页中提取的jQuery 1.4.2对象添加事件处理程序_Javascript_Jquery_Debugging_Firefox Addon_Jquery Events - Fatal编程技术网

Javascript 为什么我的Firefox扩展不使用从Firefox4的网页中提取的jQuery 1.4.2对象添加事件处理程序

Javascript 为什么我的Firefox扩展不使用从Firefox4的网页中提取的jQuery 1.4.2对象添加事件处理程序,javascript,jquery,debugging,firefox-addon,jquery-events,Javascript,Jquery,Debugging,Firefox Addon,Jquery Events,我的Firefox扩展获取一个已经嵌入到网页中的jQuery 1.4.2对象,然后尝试使用该jQuery对象修改该页面。它在Firefox3.x中运行良好,但在Firefox4中似乎不起作用 这是我的密码: window.addEventListener("load", function() { MyExt.init(); }, false); var MyExt = { targetHost: "somewebsite.com", init: function() {

我的Firefox扩展获取一个已经嵌入到网页中的jQuery 1.4.2对象,然后尝试使用该jQuery对象修改该页面。它在Firefox3.x中运行良好,但在Firefox4中似乎不起作用

这是我的密码:

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(){}));

     }
 }

我做错了什么?

是的,由于以下原因,您必须使用
wrappedJSObject

不再支持在清单中指定xpcnativewrappers=no(即XPCNativeWrapper自动化)。这始终是一种短期解决方案,允许扩展继续工作,同时作者更新代码以使用XPCNativeWrappers

如果您的加载项依赖于附加到内容对象的XBL绑定,例如,调用函数或获取和设置由XBL绑定创建的属性的能力,则需要使用XPCNativeWrapper属性wrappedJSObject来访问包装的对象

如果您需要能够调用函数或访问由web内容定义的属性,那么您也需要这样做。例如,如果您编写了一个扩展,将删除按钮添加到web邮件服务中,并且该服务定义了需要调用的window.delete()函数,则可能会出现这种情况

另一方面,如果您对内容所做的一切都是访问DOM方法和属性,那么您根本就不需要使用xpcnativewrappers=no,只需将其从清单中删除即可


有人知道这是否与Firefox4中的xpcnativewrappers=no change有关吗?具有讽刺意味的是,jQuery的
toString
经过重写,因此当传递来自其他窗口/框架的对象时,它不会中断,而这些窗口/框架中的
instanceof
会中断。显然他们没有考虑函数对象。