Показать сообщение отдельно
  #3 (permalink)  
Старый 16.12.2009, 10:56
Новичок на форуме
Отправить личное сообщение для Alex82 Посмотреть профиль Найти все сообщения от Alex82
 
Регистрация: 15.12.2009
Сообщений: 6

Я совсем новичок в JavaScript... я сделал так:
if (window.top.onload) {
     Utils.debug_console_write('case_1 begin');
     var existingOnload = null;
     existingOnload = window.top.onload;
     window.top.onload = function (ev) {   
          Utils.debug_console_write('function (ev) begin');     
          if (existingOnload) { existingOnload(ev); }
          setTimeout( Plugin.init , 1);        
          Utils.debug_console_write('function (ev) end');     
     };
      Utils.debug_console_write('case_1 end');
} else {
   Utils.debug_console_write('case_2 begin');
   Plugin.init();
}

//added your code

var readyBound = false;
var bindReady=function(){
    if ( readyBound ) return;
    readyBound = true;
 
    // Mozilla, Opera and webkit nightlies currently support this event
    if ( document.addEventListener ) {
        // Use the handy event callback
        document.addEventListener( "DOMContentLoaded", function(){
            document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
            ready();
        }, false );
 
    // If IE event model is used
    } else if ( document.attachEvent ) {
        // ensure firing before onload,
        // maybe late but safe also for iframes
        document.attachEvent("onreadystatechange", function(){
            if ( document.readyState === "complete" ) {
                document.detachEvent( "onreadystatechange", arguments.callee );
                ready();
            }
        });
 
        // If IE and not an iframe
        // continually check to see if the document is ready
        if ( document.documentElement.doScroll && window == window.top ) (function(){
            if ( isReady ) return;
 
            try {
                // If IE is used, use the trick by Diego Perini
                // [url]http://javascript.nwbox.com/IEContentLoaded/[/url]
                document.documentElement.doScroll("left");
            } catch( error ) {
                setTimeout( arguments.callee, 0 );
                return;
            }
 
            // and execute any waiting functions
            ready();
        })();
    }
 
    // A fallback to window.onload, that will always work
    if (window.addEventListener)
        window.addEventListener('load', ready, false);
    else if (window.attachEvent)
        window.attachEvent('onload', ready);
    else
        window.onload=ready;
}
/////------------------------------------------------
var    isReady=false;
var    readyList= [];
    // Handle when the DOM is ready
var ready=function() {
        // Make sure that the DOM is not already loaded
        if ( !isReady ) {
            // Remember that the DOM is ready
            isReady = true;
 
            // If there are functions bound, to execute
            if ( readyList ) {
                // Execute all of them
                var fn_temp=null
                while(fn_temp=readyList.shift()){
                    fn_temp.call( document);
                }
 
                // Reset the list of functions
                readyList = null;
            }
 
            // Trigger any bound ready events
            //jQuery(document).triggerHandler("ready");//???
        }
    }
/////------------------------------------------------
domReady=function(fn) {
        // Attach the listeners
        bindReady();
 
        // If the DOM is already ready
        if ( isReady )
            // Execute the function immediately
            fn.call(document);
 
        // Otherwise, remember the function for later
        else
            // Add the function to the wait list
            readyList.push( fn );
 
        return this;
    }

domReady(function(){
   alert('OK');
});


Utils.debug_console_write - вспомогательная функция для вывода логов. Chrome плагин подгружает этот скрипт на страничку на которую я захожу. Результаты получились такие:
  1. Захожу на http://maps.yahoo.com/ или google.ru.
    Вижу следующие логи:

    13:37:43] case_1 begin
    [13:37:43] case_1 end

    И нет сообщения 'OK' из функции domReady.

    Т.е. моя функция window.top.onload = function (ev) {...} не вызывается.
    ---
  2. Захожу на http://www.yandex.ru/

    Вижу следующие логи:

    [13:42:23] case_1 begin
    [13:42:23] case_1 end
    [13:42:24] function (ev) begin
    [13:42:24] function (ev) end

    Есть сообщение 'OK' из функции domReady.

    Т.е. вроде все ОК.
    ---
  3. Захожу на http://www.holidaylettings.co.uk/rentals/tremezzo/38067
    Вижу следующие логи:
    [13:44:21] case_1 begin
    [13:44:21] case_1 end
    [13:44:21] function (ev) begin

    Есть сообщение 'OK' из функции domReady.

    Т.е. моя функция вызывается но не завершается.
    ---
Ответить с цитированием