2011-07-13 45 views
0

我想一個參數傳遞到一個iFrame在onload事件添加PARAM如下停止的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腳本。

回答

4

您可以設置一個全局標誌(選擇不與任何其他名稱衝突適當的名稱):

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

+0

糟糕。試圖設置一個條件,忘記編寫代碼之前發佈在這裏。 – heylo

+0

@heylo:我看到:)在事件處理程序中,您可以使用'this'來引用處理程序綁定的元素。 –

+0

是的,會做:)還,謝謝你的答案:)) – heylo

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> 
+0

對不起,不能使用腳本標記:( – heylo

1

因爲HREF正在改變對onload HREF的變化將重新加載內嵌框架。

所以你必須刪除onload其他事件。

+0

啊,不知道,謝謝你指出來。 – heylo