如何注入一个执行函数的按钮?

时间:2013-02-19 01:59:18

标签: javascript html greasemonkey

我在使用Greasemonkey和Firefox javascript注入一个按钮时遇到了真正的困难,当按下该按钮时,它将执行一个功能。

例如,我正试图在the SO "Ask a Question" page上的“未答复”按钮后面放置按钮。

我希望它能运行一个能任何的函数,例如alert ("Hello World")console.log('TEST start')

有人可以发布一些示例代码来完成这项工作吗?一旦我有了工作样本,那么我应该可以从那里开始。

非常感谢提前。

1 个答案:

答案 0 :(得分:2)

这种事情的过程是:

  1. 确定要修改的内容的HTML结构。
  2. 添加或更改新内容。请注意,jQuery使其变得更加容易。
  3. 为新内容添加,修改和/或删除javascript事件侦听器。
  4. 如果通过AJAX方法添加目标内容,请使用AJAX-compensating techniques
  5. your example page

    使用 Firebug进行检查显示未答复“按钮”HTML如下所示:

    <div class="nav mainnavs">
      <ul>
        ...
        <li>
          <a href="/unanswered" id="nav-unanswered">Unanswered</a>
        </li>
      </ul>
    </div>
    


    所以我们将添加一个这样的“按钮”:

    <div class="nav mainnavs">
      <ul>
        ...
        <li>
          <a href="/unanswered" id="nav-unanswered">Unanswered</a>
        </li>
        <li>
          <a href="#" id="gmOurFirstButton">Log something</a>
        </li>
      </ul>
    </div>
    


    我们将使用jQuery's .click()激活它。

    对于此页面和此按钮,我们无需担心AJAX。

    将所有内容放在一起,完整的工作脚本如下所示:

    // ==UserScript==
    // @name     _Add a simple button to a page
    // @include  https://stackoverflow.com/questions/ask*
    // @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
    // @grant    GM_addStyle
    // ==/UserScript==
    /*- The @grant directive is needed to work around a design change
        introduced in GM 1.0.   It restores the sandbox.
    */
    var unansweredBtn   = $("#nav-unanswered");
    
    //-- Add our button.
    unansweredBtn.parent ().after (
        '<li><a href="#" id="gmOurFirstButton">Log something</a></li>'
    );
    
    //-- Activate the button.
    $("#gmOurFirstButton").click ( function () {
        console.log ("Something.");
    } );