Вы можете установить глобальный флаг (выберите подходящее имя, которое не будет конфликтовать с любым другим именем):
if (window.frames['myframe'] && !window.userSet){
window.userSet = true;
frames['myframe'].location.href='http://test.com/hello?uname='+getUserName();
}
В качестве альтернативы вы можете установить пользовательский атрибут для элемента:
var userSet = this.getAttribute('data-userset');
if (window.frames['myframe'] && !userSet){
this.setAttribute('data-userset', 'true');
frames['myframe'].location.href='http://test.com/hello?uname='+getUserName();
}
Или, если вам больше не придется снова вызывать обработчик событий, вы можете удалить его:
if (window.frames['myframe']){
this.onload = null;
this.setAttribute('onload', '');
frames['myframe'].location.href='http://test.com/hello?uname='+getUserName();
}
Кстати.для чего у вас оператор if
?Я думаю, что это всегда будет true
в любом случае.