如何使用 Greasemonkey 修改现有按钮的点击以打开新选项卡
How do I modify an existing button's onclick to open a new tab using Greasemonkey?
我在页面上有一堆按钮,我想在新选项卡中打开这些按钮,因为我正在拨号,我讨厌不得不点击后退按钮并等待页面再次加载,然后才能单击下一步按钮。
按钮代码如下所示:
<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>
我想我需要以某种方式将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 陷阱。
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/
祝你好运!
相关文章:
- 如何通过Primefaces3.5使用JSF2.0验证并在成功的情况下打开一个新的选项卡
- 打开一个新的选项卡/窗口并向其写入内容
- 使用 POST 打开新的选项卡或窗口 [PHP]
- 提交表单后,打开一个新的选项卡
- 使用javascript打开一个新的选项卡,但使用javascript保留在当前选项卡上
- 如何通过单击Highchart图中的列/栏打开新窗口/选项卡
- JavaScript在新的选项卡中打开,而不是在Chrome浏览器中打开窗口
- Javascript表单提交打开新窗口选项卡,然后重定向父页面
- 在 CSS 中使用新的选项和样式
- 来自 HREF 的新窗口/选项卡
- 将表单提交到新窗口/选项卡
- 如何在新窗口/选项卡中打开文本和 xml 文件
- 检测链接是在新窗口/选项卡还是当前窗口中打开
- 新窗口/选项卡中的JavaScript确认对话框
- Angular:打开新的选项卡,不使用弹出窗口阻止程序
- 为什么打开的窗口有时打开一个新的选项卡,有时弹出
- 如何打开新窗口/选项卡,但专注于打开窗口
- 在磁盘上的新浏览器选项卡中使用javascript以编程方式打开html文件
- 如何通过javaScript获取新打开选项卡的URL
- 打开一个新的选项卡,并使用javascript用父页面的innerHTML填充页面