JavaScript/jQuery Userscript阻止重定向

JavaScript/jQuery Userscript to thwart redirect

本文关键字:重定向 Userscript jQuery JavaScript      更新时间:2023-09-26

好的,使用Userscript,我如何检测和停止页面重定向?我没有网页来源。

以下是页面上正常发生的情况:

  1. 用户单击链接
  2. 页面通过AJAX与服务器进行检查,发送一些关于点击到PHP页面的链接的数据
  3. PHP页面显然会回复一些内容,因为随后用户会被重定向到另一个页面

那么,在步骤2中仍然允许AJAX请求通过,我如何通过使用userscript来阻止用户的重定向呢?

据我所知,window.onbeforeunload实际上只有在用户移动页面之前提供一个对话框才有帮助——我不希望这样,我想默默地阻止重定向。

编辑:我认为window.stop()可以阻止页面更改,但检测它是否会更改可能是一个挑战。。。

document.location.href = 'http://www.something.com';
window.stop();

似乎有效。但是检测到位置.href正在改变?

默认情况下,普通链接是加载另一个页面的请求,该请求与单击链接后可能执行的任何其他操作无关。然而,您不必使用普通类型的链接;看看这个:

<a style="color:#0000ff;text-decoration:underline;cursor:pointer;"
onclick="window.name='here';window.open('http://www.example.com/newpage.htm',
'here');">New Page</a>

该HTML代码将看起来与普通链接完全一样,并且与普通链接工作完全一样,以便将新页面加载到当前页面中。但它实际上是一个JavaScript*构造,这意味着你可以拦截它来做其他事情,例如:

<a style="color:#0000ff;text-decoration:underline;cursor:pointer;"
onclick="window.name='here';intercept();">New Page</a>

现在,您可以编写一个名为"intercept()"的JavaScript函数来决定是否加载新页面(执行AJAX调用)。如果你决定加载新页面,那么你只需要在AJAX回调函数中这样做:

window.open('http://www.example.com/newpage.htm','here');

如果页面上有多个链接,只需在intercept()函数调用中指定一个参数(即intercept('newpage.htm');intercept('altpage.htm');intercept('diffpage.htm');),然后在intercept函数中简单地将接收到的字符串放入全局变量中,这样在AJAX回调函数中的window.open()函数调用就可以使用全局变量打开正确的新页面。

*当然,用户必须在浏览器中启用JavaScript,链接才能工作。但是,AJAX也需要启用JavaScript,所以这不是问题。