Можно ли переопределить JavaScript в iFrame от родителя? Если так, то как? - PullRequest
3 голосов
/ 19 января 2012

Я использую элемент управления Telerik RadSpell в одном из наших приложений с сенсорным экраном. Мне удалось стилизовать его как раз правильно, однако чертовски важно использовать window.alert и window.confirm для запроса пользователя, если он хочет сохранить изменения и т. Д.

Я хочу отключить эти предупреждения, не разбирая и не изменяя элементы управления telerik.

Проблема в том, что диалог проверки орфографии использует iframe, и я не могу переопределить функцию window.confirm внутри iframe.


Пример кода для проверки подтверждения переопределения.


<!-- 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>

Результаты в

Main Page Confirm

iframe Page Confirm

Можно ли переопределить JavaScript в iframe от родителя? Если так, то как?

Ответы [ 4 ]

3 голосов
/ 23 января 2012

Я только что поделился более простым решением на первом форуме, который демонстрирует, как переопределить 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) Сохраните файл и установите свойство DialogsScriptFile RadSpell, чтобы оно указывало на этот файл, например

3) Проверьте решение.

Надеюсь, это поможет.

1 голос
/ 19 января 2012

Вы должны быть в состоянии:

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

Возможно, что-то подобное может сработать для вас:

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

Это связывает подтверждение iframe с подтверждениемparent, что хорошо, если у вас уже есть некоторая обработка для подтверждений в родительском.

Обратите внимание, что вы также захотите добавить некоторую обработку для возможных неопределенных объектов.

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;
 }
}
1 голос
/ 19 января 2012

Вы можете получить ссылку на внутреннее окно, используя javascript, если кадр находится в том же домене, что и родительский.

//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 голосов
/ 20 января 2012

Вы можете взглянуть на следующие ресурсы, которые могут быть полезны для вашего сценария: http://www.telerik.com/community/forums/aspnet-ajax/spell/how-do-i-turn-off-the-confirm-dialog.aspx а также http://www.telerik.com/help/aspnet-ajax/spell-client-check-finished.html

Они показывают, как удалить всплывающие окна RadSpell с подтверждением и предупреждением.

С уважением, Румен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...