[英]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.