好的,使用Userscript,如何检测和停止页面重定向?我没有页面来源。
以下是页面上正常发生的情况:
因此,仍然允许AJAX请求在步骤2中完成,如何通过使用用户脚本来阻止用户的重定向?
根据我的理解,window.onbeforeunload实际上只有在用户移动页面之前给出对话框才有帮助 - 我不想要这个,我想默默地阻止重定向。
编辑:我认为window.stop()会阻止页面更改,但检测到它会改变可能是一个挑战...
document.location.href = 'http://www.something.com';
window.stop();
似乎工作。但检测到location.href正在改变?
答案 0 :(得分:-3)
普通链接默认是加载另一个页面的请求,该请求与您点击链接后可能执行的任何操作无关。但是,您不必使用普通的链接;看看这个:
<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');
),然后拦截函数内部只是将接收到的字符串放入一个全局变量中,因此AJAX回调函数内的window.open()
函数调用可以使用全局变量来打开正确的新页面。
*当然,用户必须在浏览器中启用JavaScript才能使链接正常工作。但是,需要启用JavaScript才能使AJAX正常工作,所以,这不是问题。