2012-01-19 4 views
3

우리의 터치 스크린 응용 프로그램 중 하나에서 Telerik RadSpell 컨트롤을 사용하고 있습니다. 나는 그것을 바로 스타일링 할 수 있었지만, 변경 사항 등을 유지하기를 원한다면 window.alert와 window.confirm을 사용하여 사용자에게 프롬프트를 표시했다.부모로부터 iFrame의 자바 스크립트를 재정의 할 수 있습니까? 그렇다면 어떻게?

나는이 경고를 분리하여 수정하지 않고도 비활성화하려고한다. 텔 레릭 컨트롤.

문제는 맞춤법 검사 대화 상자가 iframe을 사용하며 iframe 내부에서 window.confirm 함수를 재정의하는 것처럼 보일 수 없다는 것입니다.


오버라이드 확인을위한 샘플 코드.

Main Page Confirm

iframe Page Confirm

에서


<!-- mainpage.htm --> 
<html> 
    <head> 
     <script type="text/javascript"> 
      window.confirm = function(msg){ alert(msg); } 
      confirm("Main Page Confirm"); 
     </script> 
    </head> 
    <body> 
     <iframe src="./iframepage.htm" > 
     </iframe> 
    </body> 
</html> 

<!-- iframepage.htm --> 
<html> 
    <head> 
     <script type="text/javascript"> 
      confirm("iframe confirm"); 
     </script> 
    </head> 
    <body> 
     Some content. 
    </body> 
</html> 

결과

부모로부터 iframe의 자바 스크립트를 재정의 할 수 있습니까? 그렇다면 어떻게?

+0

터치 스크린에서는이 대화 상자가 끔찍하기 때문에 응용 프로그램에서 경고를 사용하거나 어디에서나 확인하지 않는다고 추가해야합니다. –

답변

3

은 그냥 cancelHandler를 무시하고 확인 대화 상자를 숨기는 방법을 보여줍니다 첫 번째 포럼에서 쉬운 솔루션을 공유했습니다.나는 팝업을 해제 할 수있는 쉬운 방법을 제안 할

과는 cancelHandler 함수를 재정의하는 것입니다 : 여러분의 편의를 위해

나는 아래의 솔루션을 붙여 넣기하고있다.

1) 웹 응용 프로그램의 루트에 JS 파일을 이름 dialog.js을 만들고 다음 함수를 채우는 : 그 다음 단계를 수행 할 수

Telerik.Web.UI.Spell.SpellDialog.prototype.cancelHandler = function (e) { 
    if (this._cancel.disabled) { 
     return $telerik.cancelRawEvent(e); 
    } 
    //changes will be applied only if spell handler response is received, text has changed 
    //and the user confirms 
    this.closeDialog(this._spellProcessor && this._spellProcessor.textChanged() && true); 

    return $telerik.cancelRawEvent(e); 
} 

2) 파일을 저장하고 이 파일을 가리 키도록 RadSpell의 DialogsScriptFile 속성을 설정하십시오 (예 :

3) 용액을 테스트한다.

이 정보가 도움이되기를 바랍니다.

+0

굉장! 감사! –

+0

달콤한,이 완벽하게 작동합니다! 내가 묻는 것을 신경 쓰지 않으면 어디에서 js 파일 전체를 볼 수 있었습니까? –

+0

@RumenJekov 부모 창에서 iframe에 alert()를 오버 라이딩 할 수 있습니까? –

1

javascript IFF를 사용하여 innerwindow에 대한 참조를 얻을 수 있습니다.이 프레임은 부모와 동일한 도메인의 프레임입니다.

//Get iframe element by getElementById, frames[0], or whatever way you want 
var myFrame = document.getElementById("myFrame"); 
//Get the window of that frame, overwrite the confirm 
myFrame.contentWindow.confirm = function(msg){ alert("I overwrote it! : " + msg); } 
+0

경고가 있습니다. iframe이로드 된 후에이 작업을 수행해야하므로 iframe 요소의 'onload'에 연결해야합니다. –

1

당신은 할 수 있어야한다 :

document.getElementById('iframe').contentWindow.confirm = [this is confirm in the iframe]; 

는 아마도 이런 일이 당신을 위해 잘 작동 할 수 있습니다 :

document.getElementById('iframe').contentWindow.confirm = window.confirm; 

이것은의 확인에 iframe 대응의 확인을 연결할 것 부모, 당신이 이미 부모에게서 확인을 위해 약간의 처리를하면 좋다.

가능한 정의되지 않은 개체에 대한 처리를 추가하는 것이 좋습니다.

var iframe = document.getElementById('iframe'); 
//iframe exists 
if(iframe){ 
var iframe_window = document.getElementById('iframe').contentWindow; 
//window exists (won't if frame hasn't loaded) 
if(iframe_window){ 
    iframe_window.confirm = window.confirm; 
} 
} 
+0

null 체크 대신 iframe의 onload 핸들러 내에서 함수를 덮어 써야합니다. –

0

당신은 당신의 시나리오에 도움이 될 수있는 다음 리소스에서 좀 걸릴 수 있습니다 : http://www.telerik.com/community/forums/aspnet-ajax/spell/how-do-i-turn-off-the-confirm-dialog.aspxhttp://www.telerik.com/help/aspnet-ajax/spell-client-check-finished.html

그들은이 RadSpell 확인하고 경고 팝업 제거하는 방법을 보여줍니다.

안부, 제일 위

+0

안녕하세요. 첫 번째 링크는 실제로이 문제를 처음 접했을 때 작성한 글이며, 솔루션을 구현하는 프로세스는 사실임을 알게되었습니다. telerik 컨트롤의 대부분 해킹과 마찬가지로 실제로는 매우 어렵습니다. 불행히도 두 번째 링크의 이벤트는 최종 "맞춤법 검사 완료"메시지에만 적용되며 다른 두 가지 경고 및 1 개의 확인 대화 상자는 컨트롤에 내장되어 있지 않습니다. 따라서, 나는 주위에 내 방식을 해킹하려고합니다! :) –

관련 문제