簡體   English   中英

在同一域上調用iframe中的函數,支持Internet Explorer

[英]Invoking function in iframe on same-domain, supporting Internet Explorer

我在父頁面上有一個觸發javascript函數的事件,該函數又調用子iframe上的另一個函數。 兩個頁面都在同一個域中,我通過讓javascript同時在兩個頁面中顯示document.domain來驗證這一點。

這是多年來一直有效的,並在類似的主題中提出:windows.frames [“iframeID”]。somefunction(); 停止使用Internet Explorer版本8.0.7600.16385它適用於Internet Explorer版本8.0.6001.18702

我嘗試用其中的每一個替換它,結果是一樣的:iframeName.somefunction(); document.frames( “iframeName”)somefunction(); top.frames [0] .somefunction();

給出的錯誤是“訪問被拒絕”並引用somefunction()中的第一位代碼,但是,如果在iframe內部調用,somefunction()工作正常。

是否有一種新的“正確”方式從父級調用iframe中的函數? 代碼端是否有解決方法(我無法控制用戶的瀏覽器)?

編輯:這是內部函數:function somefunction(){somebutton.click(); 如果相反,我使用“alert('something');”,它可以正常工作。

EDIT2:更新的版本,以及IE9的Beta已經擴展了這個也打敗了hacky的解決方法,所以我回到了死水中。

編輯3:我已經忘記了這一點,直到有人發布了近一年之后。 這是我最終得到的解決方法:

Parent調用iframename.badscripthack(); iframe中的子函數有:function badscripthack(){document.getElementById(“OffscreenTextField”)。focus(); function functionthis(){document.getElementById(“SubmitButton”)。click(); 標簽:

顧名思義,這是一個糟糕的黑客,但這是必要的。 當然,它沒有回答處理它的“正確”方式。 它從那時起就起作用了,並且沒有任何“背板”意外觸發它(如果它們發生了,后果只是提前保存一個表格)。

家長Html

<html>
<head>
 <script type="text/javascript">
  function CallFrame()
  {
        var frame = document.getElementById("myframe");
    if(frame)
    {
           frame.contentWindow.Show();
        }
  } 
</script>
</head>
<body>
<h1> I am Parent </h1>
<input type="button" onclick="CallFrame()" value="Call Frame function" /><br/>
<iframe id="myframe" src="Frame.html" />
</body>
</html>

Frame.Html

<html>
<head>
<script type="text/javascript">
function Show()
{
alert("Called");
}
</script>
</head>

<h1> I am IFrame</h1>
<input type="button" onclick="Show();" value="Call Own function">
</body>
</html>

在FireFox和IE8中測試過

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM