【问题标题】:Intercept incoming URL with javascript使用 javascript 拦截传入的 URL
【发布时间】:2019-12-08 08:06:17
【问题描述】:

当用户使用限定 URL(例如 mysite.com/abc.html)导航到我的网站时,我想在显示任何页面之前先调用 javascript 函数。我需要它,因为我的网站是由 ajax 驱动的。

我有一个在页面首次加载时调用的函数:

<body onload="FirstJSFunction(150);”>

该函数将拦截 URL 并执行我想要的操作,但前提是合格的 URL 是 mysite.com/index.html。站点内的任何其他有效 URL 都将绕过 javascript 函数并加载请求的页面。那不是我想要的。

FirstJSFunction 是这样处理的:

<script>
function FirstJSFunction(type) {
  var gurl = GetURL();
  length = gurl.length;
  console.log("SFR URL " + length);
  var pos = gurl.lastIndexOf("/");
  console.log ("SFR_LastFwdSlash " + pos);
  if (length > pos) {
  var sub1 = gurl.substr(pos, length);
  console.log ("SFR_Sub1 " + sub1);
  sub2 = sub1.substr(1, 5);
  console.log ("SFR_Sub2 " + sub2);         
  if (sub2 == "index") {
    ShowAjax(3);
    return true; }
  if (sub2 != "index") {
    ShowAjax(3);
    return true; }
}
</script>

<script>
function GetURL() {
  var loc_href = location.href;
  console.log ("URL " + loc_href);
  var length = loc_href.length;
  console.log ("Length " + length);
  var pos = loc_href.lastIndexOf("/");
  console.log ("LastFwdSlash " + pos);
  var pos2 = loc_href.indexOf("/");
  console.log ("FwdSlash " + pos2);
  if (length > pos) {
  var substr = loc_href.substr(pos, length);
  console.log ("Substring " + substr);
  return substr;  }
}
</script>

所以我的问题是:当用户使用除 mysite.com 或 mysite.com/index.html 以外的任何 URL 导航到我的网站时——例如 mysite.com/abc.html——为什么上面的代码不起作用截取 URL 并调用 javascript 函数,如果 URL 是 index.html,就会发生这种情况。

澄清一下,我只想拦截第一个传入的 URL。我不想拦截用户在到达我的站点后输入到地址栏中的任何 URL。

感谢您对此的任何帮助。

【问题讨论】:

  • 那么代码所有其他页面上吗?听起来您真正想要的是 SPA。
  • 您需要配置服务器重定向到主页。您似乎也对从服务器发送的页面的工作方式以及其中的 javascript 运行位置有一些误解
  • 取决于网站的构建。有框架吗?您需要查看文档以了解当有人提出第一个请求时,框架的哪一部分实际上首先被命中。
  • 我不想重定向到主页,我想调用一个ajax函数。
  • 如果有其他页面没有打开代码,不清楚为什么您期望它在加载时会运行。它在它所在的页面上工作,但在看起来不像赠品的页面上却没有!

标签: javascript jquery url redirect


【解决方案1】:

我不确定你解释的所有内容,所以在这里做一些假设。

但是,如果该 JS 代码仅在 index.html 上,那么它将永远不会在任何其他页面上运行。为此,您需要将其包含在每个页面中。 只有服务器能够“看到”您的用户访问的所有页面。

【讨论】:

  • 根据@jonsharpe 上面的评论,我认为这就是问题所在。我现在正在测试它。
猜你喜欢
  • 2011-03-18
  • 2016-12-10
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多