Как остановить перезагрузку iFrame - PullRequest
1 голос
/ 13 июля 2011

Я пытаюсь передать параметр в iFrame, добавив параметр в событие onload, как показано ниже:

<iframe name="myframe" src="http://test.com/hello" onload=" frames['myframe'].location.href='http://test.com/hello?uname='+getUserName();">

</iframe>

(getUserName - моя пользовательская функция)

Но iFrame продолжает загружаться снова и снова. Как мне остановить это, используя только JavaScript (а не какой-либо JS Framework)?

Примечание. По определенным причинам я могу писать только встроенные сценарии JavaScript.

Ответы [ 3 ]

5 голосов
/ 13 июля 2011

Вы можете установить глобальный флаг (выберите подходящее имя, которое не будет конфликтовать с любым другим именем):

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 в любом случае.

1 голос
/ 13 июля 2011

, поскольку HREF изменяется на onload, а смена HREF перезагрузит iFrame.

Таким образом, вы должны удалить onload для какого-либо другого события.

0 голосов
/ 13 июля 2011

Используйте счетчик, чтобы перенаправлять его только в первый раз.

Первоначально это 0 и перенаправляет, второй раз это 1 и т. Д. И, следовательно, не перенаправляет.

<script>var counter = 0</script>

<iframe name="myframe" src="http://test.com/hello"
 onload="if (window.frames['myframe'] && counter++ === 0){ frames['myframe'].location.href='http://test.com/hello?uname='+getUserName();}">
</iframe>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...