-4

我希望在我访问的每个站点上都有一个自定义页面分析页脚......所以我使用了一种方法将 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');
    }      


}());   
4

1 回答 1

1

可能只是 code.jquery.com 有时会失败(或者至少很慢)加载 jQuery 脚本。你所做的看起来不错。您还可以使用 @require 将 jQuery 与用户脚本一起打包(因此不需要为每个页面加载请求 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.");
}());

阅读此内容以获取更多信息

于 2010-04-11T06:01:06.097 回答