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