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

时间:2013-09-12 10:39:38

标签: javascript greasemonkey window.open window.location

我在页面上有一堆按钮要在新标签页中打开,因为我正在拨号,我讨厌必须按下后退按钮并等待页面再次加载才能点击下一个按钮。

按钮代码如下所示:

<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()并将网址更改为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>

}

2 个答案:

答案 0 :(得分:1)

使用用户的onclick时要小心;看看Greasemonkey的陷阱。

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

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

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;
}

答案 1 :(得分:0)

你可以这样做:

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

无法强制使用新标签 - 浏览器会尊重用户设置是创建新标签页还是新窗口。

我为你创建了一个JavaScript小提琴,这样你就可以看到它有多简单:

http://jsfiddle.net/Fnz9R/

祝你好运!