Выполнение Javascript в отдельном фрейме

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.

Что мне здесь не хватает?


person RMD    schedule 07.12.2011    source источник


Ответы (1)


Я не на 100% ясен, если я понимаю ваш вопрос, но ознакомьтесь с последним разделом на этой странице:

http://www.infimum.dk/HTML/JSwindows.html

Я надеюсь, что это помогает.

person jcmitch    schedule 07.12.2011
comment
Из-за того, что FrameA может быть перезагружен, любая попытка заставить FrameB выполнить функцию в FrameA через переменную, содержащую указатель на эту функцию, может привести к ошибке сценария освобождения, о которой я упоминал ранее. См. stackoverflow.com/questions/ 8408358/ для более подробной информации. - person RMD; 08.12.2011