Динамически загружаемый jQuery с GreaseMonkey, несовместимым на страницах (обновление, кажется, исправляет это) ... не знаю почему - PullRequest
0 голосов
/ 10 апреля 2010

Мне нужен собственный нижний колонтитул анализа страниц на каждом сайте, который я посещаю ... поэтому я использовал метод для присоединения JQuery к unsafeWindow.

Затем я создаю плавающий нижний колонтитул на странице. Я хочу иметь возможность вызывать команды в меню, выполнять некоторую обработку, а затем помещать результаты в нижний колонтитул. К сожалению, иногда это работает, иногда нет.

В функции printOutput должно быть не менее двух предупреждений. Иногда срабатывает только один, потом (вылетает?) Без ошибок? На других страницах оба оповещения срабатывают, и он находит элемент, но не добавляет дополнительный текст. (например, www.linode.com)

Обновление страницы, затем повторное выполнение команды printOutput, кажется, всегда работает.

Кто-нибудь знает, что происходит ???

Пользовательский скрипт может быть установлен по адресу: http://www.captionwizard.com/test/page_analysis.user.js

// ==UserScript==
// @name           page_analysis
// @namespace      markspace
// @description    Page Analysis
// @include        http://*/*
// ==/UserScript==
(function() 
{
    // Add jQuery
    var GM_JQ = document.createElement('script');
    GM_JQ.src = 'http://code.jquery.com/jquery-1.4.2.min.js';
    GM_JQ.type = 'text/javascript';
    document.getElementsByTagName('head')[0].appendChild(GM_JQ);

    var jqueryActive = false;

    //Check if jQuery's loaded
    function GM_wait() 
    {
        if(typeof unsafeWindow.jQuery == 'undefined') 
        { window.setTimeout(GM_wait,100); }
        else 
        { $ = unsafeWindow.jQuery; letsJQuery(); }
    }
    GM_wait();

    function letsJQuery() 
    {
        jqueryActive = true;
        setupOutputFooter();
    }

    /******************************* Analysis FOOTER Functions ******************************/ 
    function printOutput(someText)
    {
        alert('printing output');

        if($('div.analysis_footer').length)
        {
           alert('is here - appending');
           $('div.analysis_footer').append('<br>' + someText);         
        }
        else
        {
            alert('not here - trying again');
            setupOutputFooter();
            $('div.analysis_footer').append('<br>' + someText);            
        }
    }


    GM_registerMenuCommand("Test Output", testOutput, "k", "control", "k" );


    function testOutput()
    {
        printOutput('testing this');
    }           

    function setupOutputFooter()
    {    
        $('<div class="analysis_footer">Page Analysis Footer:</div>').appendTo('body');
        $('div.analysis_footer').css('position','fixed').css('bottom', '0px').css('background-color','#F8F8F8');
        $('div.analysis_footer').css('width','100%').css('color','#3B3B3B').css('font-size', '0.8em');
        $('div.analysis_footer').css('font-family', '"Myriad",Verdana,Arial,Helvetica,sans-serif').css('padding', '5px');
        $('div.analysis_footer').css('border-top', '1px solid black').css('text-align', 'left');
    }      


}());   

1 Ответ

1 голос
/ 11 апреля 2010

Может случиться так, что code.jquery.com иногда не может (или, по крайней мере, очень медленно) загрузить скрипт jQuery. То, что вы сделали, выглядит хорошо. Вы также можете упаковать jQuery с помощью usercript, используя @require (таким образом, jquery не нужно запрашивать при каждой загрузке страницы):

// ==UserScript==
// @name          jQuery Example
// @require       http://code.jquery.com/jquery-1.4.1.min.js
// ==/UserScript==

(function() {
    // This will be executed onLoad
    // Append some text to the element with id #someText using the jQuery library.
    $("#someText").append(" more text.");
}());

прочитайте это для получения дополнительной информации .

...