2011-12-06 2 views
2

다른 프레임에서 재정의해야하는 기능이 있습니다. 또한, 내 재정의 내에서 원래 함수를 호출해야합니다. 이렇게하려면 다음을 사용하고 있습니다.해제 된 스크립트에서 코드를 실행할 수 없습니다.

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

은 FF, Chrome 및 IE에서 잘 작동합니다. 어떤 브라우저를 실행하고 있습니까? 이 코드를 일으키는 다른 부분 일 수 있습니다. –

+1

프레임은 액세스하려고 할 때 더 이상 존재하지 않습니다. 참조 : http://stackoverflow.com/questions/83132/what-causes-the-error-cant-execute-code-from-a-freed-script –

+0

나는 자유 스크립트가 무엇인지 알아야한다. '의미! – Pierre

답변

2

나는 해결책을 찾아 냈다.

기본적으로 이전에 게시 한 모든 코드를 가져 와서 eval() 함수를 사용하여 대상 프레임의 컨텍스트 내에서 실행합니다. 그래서 ... 코드가 대상 프레임 내에서 지금

myFrame.eval("SomeFunction = (function() {var originalSomeFunction = SomeFunction; return function (arg1, arg2, arg2) {alert('Inside override!'); originalSomeFunction(arg1, arg2, arg3);};})();"); 

때문에,이 범위를 벗어나하지 않으며, 우리는 더 이상 "해제"오류가 발생하지 않습니다.

4

IE에서는이를 수행 할 수 없습니다. 프레임 사이에 전달되는 모든 객체가 문자열과 같은 원시 객체인지 확인해야합니다. "Date"인스턴스조차도 나에게 문제를 일으켰지 만, 그 당시에는 모호한 Windows 2000 버전이었습니다.

"자유형 스크립트"는 IE가 의미하는 바는 개체가 "태어난"페이지 컨텍스트가 새 페이지로 덮어 쓰여졌습니다.

+0

그래서 IE의 다른 프레임에서 함수를 재정의 할 방법이 없습니까? 이상하게도 "myFrame"변수를 사용하여 함수 포인터를 보유하더라도이 오류가 발생합니다. – RMD

+0

예, 가능하지만 다른 페이지에서 태어난 "낡은"개체가있을 때 문제가 발생합니다. 코드가 코드를 터치하려고하자마자 IE는 프로토 타입 객체 (및 기타 등등)가 없어 졌음을 인식합니다. 그것은 JScript 메커니즘이 작동하는 것처럼 보이는 것입니다. – Pointy

+0

내 코드에서 "오래된"개체를 나타내는 것은 무엇입니까? 어떻게 이런 일이 일어나지 않도록이 코드를 수정할 수 있습니까? – RMD

2

당신이 구글에서오고있어 및 IE에서이 문제를 해결하기 쉬운 솔루션을 찾고 있다면 우리가 iframe inbetween 이벤트와 작업을했기 때문에 문제가 발생한 우리의 경우

합니다. 그렇게함으로써 트리거 된 이벤트와 결합 된 iframe 내용을 변경하면 이제 변경된 iframe 문서에서 스크립트를 호출 할 수 있습니다. 이것은 문제의 예외를 제기했다.

$(window).on("unload", function(){ 
    $(target).off(eventname, handler); 
}); 

문제를 추가하여

가 발생 될 중지 것이다. 마지막으로 IE 때문에 try/catch가 없습니다.

+0

'handler'는 선택 사항입니다. 그래서 대상 요소에서 모든 jQuery 클릭 핸들러를 지울 수 있다면 (예 :'.off ('click')') 할 수 있습니다. – Stan

관련 문제