如何阻止iFrame重新加载

时间:2011-07-13 08:47:43

标签: 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一直在反复加载。如何使用javascript(而不是任何js框架)来阻止这种情况?

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

3 个答案:

答案 0 :(得分:5)

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

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 :(得分:1)

因为HREF在onload上发生变化,HREF的更改将重新加载iFrame。

所以你必须将onload删除到其他一些事件。

答案 2 :(得分: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>