好的,所以我正在处理使用ASP.NET Web Forms的网站。它包含许多超链接,其中包含javascript:__doPostBack(...
形式的href,这非常令人讨厌,因为您不能像在普通超链接中那样在新窗口中单击超链接以打开页面。我想找到一个能解决这个问题的用户脚本。到目前为止,我已经想出了这个,这似乎在很大程度上起作用。我遇到的一个警告是,如果我中间点击链接打开一个新窗口,然后尝试单击原始页面上的另一个回发链接,有时会将我带到错误的页面。
有谁知道更好的方法来解决这个问题?
let form = document.querySelector('form');
let links = document.querySelectorAll('a');
for (let link of links) {
if (link.href.startsWith('javascript:')) {
link.addEventListener('click', function(e) {
if (e.button === 1) {
form.setAttribute('target', '_blank');
eval(this.href.slice(11));
form.removeAttribute('target');
e.preventDefault();
}
});
}
}
答案 0 :(得分:0)
评论过于笨拙,所以这里有部分答案......
的问题:
这个问题确实需要一个MCVE,在这种情况下,问题的代码会链接到违规网站。
对于你的大问题(链接到错误的地方),这是特别需要的。
请注意,该网站也可能作为状态机运行(通常是一种不良做法),因此您唯一的追索权可能是自动重新加载原始页面(在真实,隐藏或弹出行为方式)然后解雇行为不端的链接。 Asp.net和银行网站对这种设计特别不好。
代码假设只有一个表单。即使在某一点检查页面时它是正确的,这也不是一个好的假设。
document.querySelector('form');
和:let links = document.querySelectorAll("form a[href*='doPostBack']");
eval()
将允许恶意JS做无法形容的邪恶。将1或2个参数解析为__doPostBack()
。它们总是弦乐。然后直接致电window.__doPostBack()
或unsafeWindow.__doPostBack()
。