如何使用 Greasemonkey 修改现有按钮的点击以打开新选项卡

How do I modify an existing button's onclick to open a new tab using Greasemonkey?

本文关键字:新选项 选项 修改 Greasemonkey 何使用 按钮      更新时间:2023-09-26

我在页面上有一堆按钮,我想在新选项卡中打开这些按钮,因为我正在拨号,我讨厌不得不点击后退按钮并等待页面再次加载,然后才能单击下一步按钮。

按钮代码如下所示:

<button onclick="window.location.href='?act=stock&amp;i=273';return false;" class="wide">Stock in Shop</button>
<button onclick="window.location.href='?act=stock&amp;i=287';return false;" class="wide">Stock in Shop</button>
<button onclick="window.location.href='?act=stock&amp;i=193';return false;" class="wide">Stock in Shop</button>


我想我需要以某种方式将window.location.href更改为window.open(),并将 URL 更改为以 http://www.felisfire.com/possessions? 开头,然后从原始 onclick 添加 href 部分......但我不知道该怎么做,搜索 3 个小时的答案并没有帮助......

请! 我将如何使用Greasemonkey更改这些按钮?


到目前为止可能的代码,但我认为它不起作用:

var buttons = document.getElementsByClassName('wide');
for (var i = 0; i < buttons.length; i++) {
  buttons[i]=button.onclick="window.open('http://www.felisfire.com/possessions + *how do I get the part I need from the original onclick?*');">Stock in Shop</button>
}

使用用户脚本中的onclick时要小心;请参阅 Greasemonkey 陷阱。

使用 jQuery 或

querySelectorAll 获取按钮,然后使用 jQuery 或 addEventListener 设置新的单击处理程序。

下面从旧的 onclick 中提取密钥位,将其存储在数据属性中,并将 onclick 替换为 web 2.0 处理程序:

var stockBtns   = document.querySelectorAll ("button.wide[onclick*='window']");
for (var J = stockBtns.length - 1;  J >= 0;  --J) {
    var oldClick    = stockBtns[J].getAttribute ("onclick");
    var payloadMtch = oldClick.match (/(act=.+?)';return/);
    if (payloadMtch  &&  payloadMtch.length > 1) {
        var payload = payloadMtch[1];
        //-- Don't use onclick!
        stockBtns[J].removeAttribute ("onclick");
        //-- Store payload value.
        stockBtns[J].setAttribute ("data-destQry", payload);
        //-- Activate click the proper way, especially for userscripts
        stockBtns[J].addEventListener ("click", openNewTab, false);
    }
}
function openNewTab (zEvent) {
    var baseURL     = "http://www.felisfire.com/possessions"
    /* Or be smart and use:
    var baseURL     = location.protocol + "//"
                    + location.host
                    + location.pathname
                    ;
    */
    window.open (baseURL + "?" + zEvent.target.getAttribute ("data-destQry") );
    return false;
}

你可以这样做:

<button onClick="window.open('*my-url*');">Stock in Shop</button>

没有办法强制使用新选项卡 - 浏览器将尊重用户的设置,无论是创建新选项卡还是新窗口。

我为您创建了一个 JavaScript 小提琴,以便您可以亲眼看到这是多么简单:

http://jsfiddle.net/Fnz9R/

祝你好运!