Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript浏览器导航栏事件_Javascript_Jquery_Html - Fatal编程技术网

JavaScript浏览器导航栏事件

JavaScript浏览器导航栏事件,javascript,jquery,html,Javascript,Jquery,Html,我想防止用户导航到未通过html元素访问的URL。例如: 实际浏览:myweb.com/news 我想导航到myweb.com/news?article_id=10,方法是在浏览器导航栏中写入此内容,以避免按任何元素(如),但我对该问题的“参数”版本感兴趣。尝试添加事件侦听器: window.addEventListener('popstate', function(event) { var location = document.location; var state = J

我想防止用户导航到未通过html元素访问的URL。例如:

实际浏览:
myweb.com/news


我想导航到
myweb.com/news?article_id=10
,方法是在浏览器导航栏中写入此内容,以避免按任何元素(如
),但我对该问题的“参数”版本感兴趣。

尝试添加事件侦听器:

window.addEventListener('popstate', function(event)
{
    var location = document.location;
    var state =  JSON.stringify(event.state);
});
要检查URL,最好将其与正则表达式匹配,如:

if (url.match(/\?./)) {
  // do not allow access
}

您可能需要对此进行扩展,具体取决于您需要禁止访问的其他URL。

有一些已知的解决方案:

  • )每次用户单击链接时,您都会将页面值保存到cookie中。 稍后,在服务器上检查该间隔(值-1…值+1)

  • )还可以保存到隐藏字段,并在服务器中检查该值

假设一个用户在第3页。(服务器为该页提供服务-因此存在值为3的cookie/隐藏值)

现在他试着转到第10页:


您在服务器端读取cookie+请求的页码。如果间隔大于1,则您拒绝该请求。

可能是相关的,我不确定您是否真的可以这样做。确保您可以使用历史API,监听更改,如果有禁止的内容,则立即更改路径。应该允许用户从导航栏导航到他想要的任何地方。不管输入了什么参数,只需将用户重定向到
/news
if (url.match(/\?./)) {
  // do not allow access
}