2011-12-07 33 views
2

Internet Explorer 6/7/8。在單獨的框架中執行Javascript

我使用eval()調用來確保代碼在多幀網站內特定幀的上下文中執行。

我遇到的情況是我基本上將FrameA中方法的完全限定名稱傳遞給FrameB。然後,我希望FrameB在FrameA中執行所述方法 - 但是在FrameA的上下文中。由於IE內部的限制,這很關鍵,否則可能導致「釋放腳本」錯誤。請參閱:Can't execute code from a freed script

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的嵌套聲明。

我在這裏錯過了什麼?

回答

0

我不是100%清楚,如果我理解你的問題,但檢查出的最後一節在此頁:

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

我希望它能幫助。

+0

由於FrameA可能被重新加載的事實,任何嘗試讓FrameB通過包含指向該函數的指針的變量在FrameA中執行函數可能會導致前面提到的「釋放腳本」錯誤。有關更多詳細信息,請參閱http://stackoverflow.com/questions/8408358/cant-execute-code-from-a-freed-script。 – RMD

相關問題