2010-09-10 42 views
0

浏览器元素具有onpopupshowing属性,该属性是由多个javascript语句组成的字符串。如何将JavaScript字符串转换为JavaScript函数,保留正确的“this”?

我想“重写”那一点的JavaScript。如果这是一个函数,我只是将它分配给一个变量,将我的“覆盖”函数赋值给元素属性,并且(如果需要的话)从我的覆盖函数中调用原始函数,就像这样:

var oldfunc; 
function myoverrridingfunc() { my statement; oldfunc(); my other statement; } 

oldfunc = element.getAttribute("onpopupshowing") 
element.setAttribute("onpopupshowing", myoverrridingfunc); 

但element.getAttribute(“onpopupshowing”)不是函数,它是一个字符串。

我可以使用Function对象将字符串转换为函数,但该字符串包含对this的引用。我如何保留正确的this

拦截/覆盖这段脚本的最好方法是什么?注意:这只需要在Firefox中工作,而不是在任何版本的java/ECMAscript中。

谢谢。

回答

1
var oldfuncStr = element.getAttribute("onpopupshowing"); 
element.removeAttribute("onpopupshowing"); 
var oldfunc = new Function(oldfuncStr); 
element.addEventListener("popupshowing", function() 
{ 
    myStatement; 
    oldfunc.call(this); 
    otherStatement; 
}, false); 

call是专门针对指定this。我在Firefox中进行测试,但使用onclick事件而不是onpopupshowing

+0

感谢您的回答。几个问题:原始代码需要事件参数。就像oldfunc.call(this,event)一样简单吗?另外,为什么addEventListener,而不是只是分配一个匿名函数onpopshowing与setAttribute?谢谢你的耐心。 – tpdi 2010-09-10 19:04:26

+0

@tpdi,是的,这是如何将附加参数传递给'call'。通常不鼓励使用on-attributes,其中包括每个元素的限制。但它可能会在这里很好地工作。 – 2010-09-10 19:24:07

0

也许你正在反思这一点。为什么不把你的JavaScript语句包含在引号中并将其分配给属性?如果该属性需要JavaScript语句作为字符串,我不希望分配函数引用甚至可以工作。 (是吗?)

相关问题