Javascript 如何修改现有按钮';s onclick可使用Greasemonkey打开新选项卡?

Javascript 如何修改现有按钮';s onclick可使用Greasemonkey打开新选项卡?,javascript,greasemonkey,window.open,window.location,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='

我在一个页面上有一堆按钮,我想在一个新的标签页中打开这些按钮,因为我正在拨号,我讨厌在我点击下一个按钮之前点击后退按钮并等待页面再次加载

按钮代码如下所示:

<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>
您可以这样做:

<button onClick="window.open('*my-url*');">Stock in Shop</button>
进货车间
无法强制创建新选项卡——浏览器将根据用户的设置创建新选项卡或新窗口

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

祝你好运

您可以这样做:

<button onClick="window.open('*my-url*');">Stock in Shop</button>
进货车间
无法强制创建新选项卡——浏览器将根据用户的设置创建新选项卡或新窗口

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


祝你好运

使用用户脚本中的
onclick
时要小心;看看那些油嘴滑舌的陷阱

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

使用用户脚本中的
onclick
时要小心;看看那些油嘴滑舌的陷阱

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

我知道。。。我的浏览器设置为在新选项卡中打开。。。无论如何,这可能会奏效,但我不知道如何抓住
?act=stock&;i=273
原始单击事件的一部分。。。就像我说的,我觉得自己像个白痴lol@KatCox,我不明白你在上面评论中的问题是什么意思。。。你能详细说明一下吗?我该如何更改页面上的代码。。。我会按类名“wide”搜索每个按钮的
?act=stock&;i=273
包含不同的数字。。。所以我必须保留代码的那部分我知道。。。我的浏览器设置为在新选项卡中打开。。。无论如何,这可能会奏效,但我不知道如何抓住
?act=stock&;i=273
原始单击事件的一部分。。。就像我说的,我觉得自己像个白痴lol@KatCox,我不明白你在上面评论中的问题是什么意思。。。你能详细说明一下吗?我该如何更改页面上的代码。。。我会按类名“wide”搜索每个按钮的
?act=stock&;i=273
包含不同的数字。。。因此,我必须能够保留代码的这一部分,我必须将“?”从基本url中去掉,因为地址以双“?”结尾,但除此之外,它工作得很好!谢谢(我知道我可能应该开始一个新的问题,但这似乎是浪费)在使用此脚本时,单击按钮时如何更改按钮文本?我尝试添加
button.wide.innerHTML=“Clicked!”
右前
返回false但是它不起作用,像
zEvent.target.textContent==“Clicked!”
应该可以起作用。把它放在
窗口的前面。open()
。我必须拿出一个“=”然后它就工作了。。。非常感谢。现在,在我睡了一会儿之后,我必须把这个脚本拆开,试着弄清楚它是如何工作的(另外,我想从页面上抓取项目名称,并尝试至少在窗口标题或其他地方显示它,因为股票页面没有告诉你你选择了哪个项目,所以一定要了解它是如何工作的,哈哈)我不得不从基本url中去掉“?”,因为地址的结尾是双“?”,但除此之外,它工作得很好!谢谢(我知道我可能应该开始一个新的问题,但这似乎是浪费)在使用此脚本时,单击按钮时如何更改按钮文本?我尝试添加
button.wide.innerHTML=“Clicked!”
右前
返回false但是它不起作用,像
zEvent.target.textContent==“Clicked!”
应该可以起作用。把它放在
窗口的前面。open()
。我必须拿出一个“=”然后它就工作了。。。非常感谢。现在,在我睡了一会儿之后,我必须把这个脚本拆开,试着弄清楚它是如何工作的(另外,我想从页面上抓取项目名称,并尝试至少在窗口标题或其他地方显示它,因为股票页面没有告诉你你选择了哪个项目,所以一定要了解它是如何工作的,哈哈)