Главная > HTML, JavaScript, Программирование > Не удается выполнить программу из освобожденного сценария.

Не удается выполнить программу из освобожденного сценария.

23 Май 2007

Недавно столкнулся с токой проблемой, что в IE из одного фрейма, нельзя расширить объект, в другом фрейме. Нет вообще можно, но при обновлении страницы новые свойства/методы не сохраняються. Для большей наглядности приведу код :

index.html

<html>
<head>
    <title>Frameset</title>
</head>

<script type="text/javascript">

var Obj = Function();
Obj.prototype = {
    extend : function(name, func)
    {
        if (!this[name]) // comment this line
            this[name] = func;
    }
}
var object = new Obj();

</script>
<frameset rows="*">
    <frame id="main" name="main" src= "frame.html" noresize scrolling="No"></frame>
    <noframes/>
</frameset>
</html>
frame.html

<html>
<head>
    <title>Frame</title>
</head>
<body>
<script type="text/javascript">

window.parent.object.extend('foo',function(){alert('this is extendering function!');});
window.parent.object.foo();

</script>
<input type="button" value="refresh" onclick= "window.location.reload(false);">
</body>
</html>

Так вот первый раз скрипт срабатывает на "ура", а при нажатии на кнопку вылазит ошибка "Can't execute code from a freed script". В остальных браузерах все пучком.

Пока сам выяснял в чем дело обнаружил, что такая проблема недавно наблюдалась в Dojo с тултипами...

Решение проблемы простое - не расширять объекты из других фреймов или не проверять и если уже такой существует и расширять каждый раз.

Комментирование отключено.