Internet Explorer 6/7/8.
Я использую вызовы eval(), чтобы убедиться, что код выполняется в контексте определенных фреймов на многофреймовом веб-сайте.
Ситуация, в которой я сталкиваюсь, заключается в том, что я в основном передаю полное имя метода из FrameA в FrameB. Затем я хочу, чтобы FrameB выполнял указанный метод внутри FrameA, но из контекста FrameA. Это очень важно из-за ограничения внутри IE, которое в противном случае может привести к ошибкам «освобожденного сценария». См.: Невозможно выполнить код из освобожденного скрипта
FrameB сначала использует eval для получения целевого объекта фрейма, а затем вызывает eval для результирующего объекта для выполнения метода, находящегося в этом фрейме. Итак, рассмотрим следующее выполнение внутри FrameB:
eval("top.FrameA").eval("SomeMethod(1,2);");
Первый eval возвращает объект окна, но вызов второго eval всегда приводит к ошибке "ожидаемый объект".
Интересно, что приведенный выше код работает внутри FrameA, но на самом деле он выполняется внутри FrameB с помощью следующего кода:
top.FrameB.eval("eval('top.FrameA').eval('SomeMethod(1,2);');");
Таким образом, проблема как-то связана с вложенностью операторов eval.
Что мне здесь не хватает?