我有一个功能,在我需要覆盖的不同帧中。另外,我需要从我的覆盖中调用原始函数。为此,我使用以下内容:
myFrame.SomeFunction = (function () {
var originalSomeFunction = myFrame.SomeFunction;
return function(arg1, arg2, arg3) {
alert('In override!');
originalSomeFunction(arg1, arg2, arg3);
};
})();
当我执行此代码时,我得到“无法从释放的脚本执行代码”。
思考?有一个更好的方法吗?在IE 6,7,8和9中进行测试。
答案 0 :(得分:4)
你发现,你不能在IE中做到这一点。您需要确保在帧之间传递的任何对象都是字符串等本机内容。甚至“日期”实例也给我带来了问题,尽管那是在当天晦涩的Windows 2000版本上。
通过“释放脚本”,IE意味着您的页面上下文中某个对象“已经”被新页面覆盖了。
答案 1 :(得分:2)
我找到了解决方案。
基本上,您使用我之前发布的所有代码,并使用eval()函数从目标帧的上下文中执行它。所以......
myFrame.eval("SomeFunction = (function () {var originalSomeFunction = SomeFunction; return function (arg1, arg2, arg2) {alert('Inside override!'); originalSomeFunction(arg1, arg2, arg3);};})();");
因为代码现在位于目标框架内,所以它不会超出范围,我们不会再出现“已释放”错误。
答案 2 :(得分:2)
如果您从谷歌来到这里并正在寻找一个简单的解决方案来解决IE中的这个问题:
在我们的案例中出现了问题,因为我们正在使用iframe之间的事件。通过这样做,有可能在更改iframe内容并结合触发事件时,它将尝试在现在更改的iframe文档上调用脚本。这引起了有争议的例外。
添加
$(window).on("unload", function(){
$(target).off(eventname, handler);
});
问题将不复存在。最后没有尝试/捕获因为IE。