Как преобразовать строку JavaScript в функцию JavaScript, сохранив правильное «это»? - PullRequest
0 голосов
/ 10 сентября 2010

Элемент браузера имеет атрибут onpopupshowing, который представляет собой строку, состоящую из нескольких операторов javascript.

Я хочу "переопределить" этот бит 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.

Спасибо.

Ответы [ 2 ]

1 голос
/ 10 сентября 2010
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 голосов
/ 11 сентября 2010

Возможно, вы обдумываете это. Почему бы просто не обернуть свои операторы JavaScript в кавычки и присвоить их атрибуту? Если атрибут ожидает операторы JavaScript в виде строки, я бы не ожидал, что назначение ссылки на функцию будет работать в любом случае. (так?)

...