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&i=273';return false;" class="wide">Stock in Shop</button> <button onclick="window.location.href='
<button onclick="window.location.href='?act=stock&i=273';return false;" class="wide">Stock in Shop</button>
<button onclick="window.location.href='?act=stock&i=287';return false;" class="wide">Stock in Shop</button>
<button onclick="window.location.href='?act=stock&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()
。我必须拿出一个“=”然后它就工作了。。。非常感谢。现在,在我睡了一会儿之后,我必须把这个脚本拆开,试着弄清楚它是如何工作的(另外,我想从页面上抓取项目名称,并尝试至少在窗口标题或其他地方显示它,因为股票页面没有告诉你你选择了哪个项目,所以一定要了解它是如何工作的,哈哈)