1

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

按钮代码如下所示:

<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.hrefwindow.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>

}
4

2 回答 2

1

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

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

下面从旧的 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;
}
于 2013-09-12T12:21:44.243 回答
0

你可以这样做:

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

没有办法强制创建一个新选项卡——浏览器将尊重用户的设置是创建一个新选项卡还是一个新窗口。

我为您创建了一个 JavaScript fiddle,以便您自己了解这是多么简单:

http://jsfiddle.net/Fnz9R/

祝你好运!

于 2013-09-12T10:53:56.100 回答