Вызов функции в iframe на том же домене, с поддержкой Internet Explorer - PullRequest
3 голосов
/ 01 сентября 2010

У меня есть событие на родительской странице, которое запускает функцию 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 (), однако somefunction () работает нормально, если вызывается внутри iframe.сам по себе.

Существует ли новый "правильный" способ вызова функций внутри iframe из родительского элемента?Есть ли обходной путь на стороне кода (я не могу управлять браузером пользователя)?

РЕДАКТИРОВАТЬ: Вот внутренняя функция: function somefunction () {somebutton.click ();} Если вместо этого я использую «alert ('кое-что»); », это работает без ошибок.

EDIT2: более новая версия, а также бета-версия IE9 расширили это, чтобы также победить хакерский обходной путь, поэтому яобратно в воду.

РЕДАКТИРОВАТЬ3: Я забыл об этом, пока кто-то опубликовал почти год спустя.Это обходной путь, к которому я прибег:

Родительский вызов iframename.badscripthack ();Дочерний элемент в iframe имеет функцию: function badscripthack () {document.getElementById ("OffscreenTextField"). Focus ();} function submitthis () {document.getElementById ("SubmitButton"). click ();} И тег:

Как следует из названия, это плохой взлом, но это было необходимо.Конечно, это не отвечает «правильному» способу справиться с этим.С тех пор это сработало, и никто не «задним ходом» запускал его случайно (и если они это сделали, то последствия просто сохраняли форму раньше).

1 Ответ

1 голос
/ 09 июня 2011

Родительский 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...