Невозможно выполнить код из освобожденного скрипта - IE6 IE7 IE8 IE9 - PullRequest
8 голосов
/ 28 апреля 2011

Я столкнулся с этой проблемой сегодня в IE6 (но воспроизводим во всех последних версиях IE).

Я заметил, что довольно много людей сталкивались с этой проблемой, и я не видел очень практичного способа решить эту проблему.

Похоже, существует другое решение, касающееся порядка тегов сценариев и мета-тегов в заголовке HTML-документа. Я не подтвердил это, но вот ссылка в любом случае: Что вызывает ошибку «Невозможно выполнить код из освобожденного скрипта»

Я также знаю решение этой проблемы, поэтому выкладываю его ниже

Ответы [ 3 ]

16 голосов
/ 28 апреля 2011

Прежде всего, вам нужно найти источник сообщения.

IE известен своими ужасными сообщениями об ошибках, но, к счастью, IE9 кажется несколько способным.Если эта ошибка возникает в IE6, IE7 или IE8, она также будет возникать в IE9, поэтому используйте IE9 для отладки (для вашего здравого смысла)

Откройте консоль веб-разработчика в IE9 (нажмите F12) и выполните шаги, чтобы произвестиэта ошибка.

IE9 теперь должен дать вам указатель файла и строки на консоли, ууу!

Что обычно не работает, так это обратный вызов, который выполняется после некоторой задержки, либо setTimeout, либо потому, чтозапроса Ajax.Если окно, документ или фрейм, в котором определен обратный вызов, было выгружено, то вы получите это сообщение, когда оно попытается выполнить вашу функцию обратного вызова.

Похоже, другие браузеры игнорируют эту проблему, и это нормально, я думаю.Чтобы заставить IE делать то же самое, просто оберните обратный вызов в блок try-catch (я не знаю, как будет оцениваться обратный вызов, я не думаю, что он оценивается как неопределенный).Если вы хотите иметь более точную обработку ошибок или если вы действительно хотите предпринять действия, когда это происходит, вы, вероятно, можете сделать это, и, пожалуйста, сделайте сообщение здесь, потому что мне любопытно, какой вариант использования фактически потребовал бы этого.

0 голосов
/ 25 января 2017

Если у вас есть страница, которая использует несколько фреймов, эта ошибка может быть вызвана тем, что объекты, инициализированные в одном фрейме, используются в каком-то другом фрейме после удаления исходного фрейма со страницы.

Когда это происходит, тогдав зависимости от ситуации вам может потребоваться:

  • Проверка вашего кода на наличие потенциальных утечек памяти
  • Если эти объекты представляют некоторые данные, которые вы do действительно хотите передать междукадры, затем рассмотрите возможность использования их строковой формы.
0 голосов
/ 25 мая 2012

Решение - не забудьте поместить все операторы META ДО любых операторов скрипта.

...