Javascript 如何阻止iFrame重新加载

Javascript 如何阻止iFrame重新加载,javascript,iframe,Javascript,Iframe,我试图通过在onload事件中添加参数将参数传递给iFrame,如下所示: <iframe name="myframe" src="http://test.com/hello" onload=" frames['myframe'].location.href='http://test.com/hello?uname='+getUserName();"> </iframe> (getUserName是我的自定义函数) 但是iFrame会一次又一次地加载。如何仅使用j

我试图通过在onload事件中添加参数将参数传递给iFrame,如下所示:

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

</iframe>

(getUserName是我的自定义函数)

但是iFrame会一次又一次地加载。如何仅使用javascript(而不是任何js框架)来阻止这种情况

注意:由于某些原因,我只能编写内联javascript脚本。

您可以设置一个全局标志(选择一个不与任何其他名称冲突的适当名称):

或者,可以为元素设置自定义属性:

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
语句?我认为无论如何它都是
正确的

您可以设置一个全局标志(选择一个不与任何其他名称冲突的适当名称):

或者,可以为元素设置自定义属性:

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
语句?我认为不管怎样,它总是
正确的

使用一个计数器,这样它只在第一次重定向时才正确

最初它是
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>
var计数器=0

使用计数器,使其仅在第一次重定向时

最初它是
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>
var计数器=0

因为HREF在
onload上更改,而HREF的更改将重新加载iFrame


因此,您必须将
onload
删除到其他事件。

因为HREF在
onload
上更改,并且更改HREF将重新加载iFrame


因此,您必须将
onload
删除到其他事件。

Oops。正在尝试设置条件,但在将其发布到此处之前忘记编辑代码。现在已更改..@heylo:I see:)在事件处理程序中,您可以使用
this
引用处理程序绑定到的元素。Oops。正在尝试设置条件,但在将其发布到此处之前忘记编辑代码。现在已更改..@heylo:我明白了:)在事件处理程序中,您可以使用
this
引用处理程序绑定到的元素。抱歉,不能使用脚本标记:(抱歉,不能使用脚本标记:(