Javascript 为什么我的Firefox扩展不使用从Firefox4的网页中提取的jQuery 1.4.2对象添加事件处理程序
我的Firefox扩展获取一个已经嵌入到网页中的jQuery 1.4.2对象,然后尝试使用该jQuery对象修改该页面。它在Firefox3.x中运行良好,但在Firefox4中似乎不起作用 这是我的密码: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() {
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
会中断。显然他们没有考虑函数对象。