代码之家  ›  专栏  ›  技术社区  ›  Ross Rogers

在带有greasemonkey扩展名的chrome中,如何修改一个`<a..>`构造来去掉onclick=属性?

  •  1
  • Ross Rogers  · 技术社区  · 14 年前

    我想修改一个内部网页,去掉一些 onclick 某些环节的行为。

    内部网页有许多链接,如:

    <a href="/slm/detail/ar/3116370" onclick="rallyPorthole.showDetail('/ar/view.sp','3116370','pj/b');return false;">foo de fa fa</a>
    

    如何对chrome进行扩展以便执行以下操作:

    for link in all_links:
        if link's href attribute matches '/slm/detail/ar/...':
            remove the onclick attribute
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Ross Rogers    14 年前

    发现后 this script ,可以将以下代码放入以 .user.js 安装在Firefox或Chrome中。

    // ==UserScript==
    // @name          Rally Onclick Nuke
    // @namespace     http://diveintogreasemonkey.org/download/
    // @description   Nukes the "onclick" attribute from user story links so you can CTRL click a link and have it open in a new tab
    // @include       https://*rally.sp
    // ==/UserScript==
    
    var links = document.getElementsByTagName("a");
    for (i = 0; i < links.length; i++) {
      var node = links[i];
        var link = node.getAttribute("href");
        if (link && link.indexOf("slm/detail/ar/") > -1 ) {
            if (node.getAttribute("onclick")) {
              node.removeAttribute("onclick");
            }
        }
    } 
    
        2
  •  1
  •   erikvold    14 年前

    而不是 document.getElementByTagName("a") 你也可以使用 document.links 你可以读到 here .

    所以要修改ross rogers的代码:

    var node, links = document.links;
    for (var i = 0; node = links[i]; i++) {
      if (node.indexOf("slm/detail/ar/") > -1 ) {
          if (node.getAttribute("onclick")) {
            node.removeAttribute("onclick");
          }
      }
    }