При попытке изменить innerHTML в теге html в opera она отправляет меня в начало страницы html

#javascript #opera

#javascript #opera

Вопрос:

Я пишу light wyswig (iframe). У меня есть функция, которая подсчитывает длину в iframe при вводе события и изменении в поле (для оставшихся символов) количества символов. Но в Opera 9.24, когда я меняю окно браузера innerHTML, я отправляюсь в начало страницы html.

 //this.doc - iframe document
            $(this.doc).keydown(function(e)
            {
                if (e.ctrlKey || e.metaKey) isCtrl = true;

                if (e.keyCode == 9) { this.execCommand('indent', false); return false; }
                if (e.keyCode == 66 amp;amp; isCtrl) { this.execCommand('bold', 'bold'); return false; }`enter code here`
                if (e.keyCode == 73 amp;amp; isCtrl) { this.execCommand('italic', 'italic'); return false; }                              
            }.bind2(this)).keyup(function(e)
            {                                   
                isCtrl = false;     

                if (e.keyCode == 13)
                {                   
                    return true;
                }                                                           
                if(this.opts.maxlength)
                    this.checkLength();                             
                if(this.opts.autoSync)
                    this.syncCode();                                            
            }.bind2(this));


        checkLength: function() {
            var html = this.getHtml();

            if (html.length >= this.opts.maxlength) {
                html = html.substr(0, this.opts.maxlength );                
                this.setHtml(html);             
                alert('Комментарий должен содержать до '   this.opts.maxlength);
            } else {                                
                var number = this.opts.maxlength - html.length;
//li_counter - box for characters left
                    this.li_counter.html("Осталось символов: "   number);               
            }
    // bind2
    Function.prototype.bind2 = function(object)
    {
        var method = this; var oldArguments = $.makeArray(arguments).slice(1);
        return function (argument)
        {
            if (argument == new Object) { method = null; oldArguments = null; }
            else if (method == null) throw "Attempt to invoke destructed method reference.";
            else { var newArguments = $.makeArray(arguments); return method.apply(object, oldArguments.concat(newArguments)); }
        };
    };  

        },      
  

Ответ №1:

Вы уверены this.doc является ли IFRAME документом, а не по какой-то причине родительским документом? Где this.doc установить?

Кстати, Opera 9.24 уже довольно старая, и у нее не должно быть много пользователей. Есть ли какая-то конкретная причина, по которой вам нужно протестировать эту устаревшую версию?