[英]Why does my Firefox extension not add event handlers using jQuery 1.4.2 object pulled from webpage in Firefox 4
我的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(){}));
}
}
我究竟做错了什么?
是的,由于API的更改 ,您必须使用wrappedJSObject
:
不再支持在清单中指定xpcnativewrappers = no(即XPCNativeWrapper自动化)。 始终打算将其作为一种短期解决方法,以使扩展在作者更新其代码以使用XPCNativeWrappers时继续起作用。
如果您的附加组件依赖于附加到内容对象的XBL绑定(例如,调用功能或获取和设置XBL绑定创建的属性的能力),则需要使用XPCNativeWrapper属性wrapdJSObject来访问包装的对象。
如果您需要能够调用函数或访问由Web内容定义的属性,则也需要这样做。 例如,如果您编写了将删除按钮添加到Web邮件服务的扩展,并且该服务定义了您需要调用的window.delete()函数,则可能是这种情况。
另一方面,如果您对内容所做的全部工作都是访问DOM方法和属性,那么您根本不需要使用xpcnativewrappers = no,只需将其从清单中删除即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.