如何根据读取的 cookie 值使超链接指向不同的 url?

Posted

技术标签:

【中文标题】如何根据读取的 cookie 值使超链接指向不同的 url?【英文标题】:How to make a hyperlink point to different url based on a read cookie value? 【发布时间】:2013-03-04 06:53:00 【问题描述】:

场景

在我的网站上,每个页面的菜单(通常的“服务”、“关于我们”、“联系我们”菜单)上都有指向“contactus.html”页面的链接,并且每个页面都是使用 Dreamweaver 模板制作的,并且该菜单只能在.dwt 模板文件本身。

当用户第一次访问“index.html”时,会放置一个名为“client-location”的cookie,其中包含客户端的位置。

期望的结果:

当客户点击 Contact Us 菜单项时,我想读取 client-location cookie 并将用户发送到正确的联系页面,例如contactus2.htmlcontactus3.html

我是从下面链接中的 *** 答案中得到的。 script.js 文件中会包含这样的内容


    document.getElementById("contactlink").onclick = function() 
    var clientlocation = readCookie(); // this returns contact1.html, a weblink

    document.getElementById("contactlink").href=clientlocation; 

可能的问题:

用户第一次访问网站时完全有可能直接进入“关于我们”部分,而 cookie 根本不会被放置来提及他们的位置。在这种情况下,我想访问 contatus1.html ,这是一个通用的联系我们页面。

如果 javascript 被禁用,那么浏览器在点击时甚至不会去任何地方。

我在网上阅读并检查了这个 How to change href of <a> tag on button click through javascript 也是,但我想知道是否 a) 会有任何可访问性问题 b)如果这是一个好方法

【问题讨论】:

【参考方案1】:

您的“联系我们”页面肯定有固定位置吗?对我来说,这似乎是对 cookie 的不必要使用。

example.com/ContactUs 可以通过链接到../ContactUs 等方式从example.com/stuff/About 引用。

同样,您可以使用location.protocol + '//' + location.host(在此处返回example.com)并附加必要的页面来拉取​​文档根目录。

var clientlocation = location.protocol + '//' + location.host + '/ContactUs';
document.getElementById("contactlink").href=clientlocation;

【讨论】:

谢谢,但没有联系我们页面有多个位置,我们在城市有多个收集点,向客户展示网站的本地化版本是必不可少的,这样他们就知道他们正在与当地公司打交道,并且不是全市范围的公司。 啊,我明白了,现在我明白您所说的“客户端位置 cookie”是什么意思了。 :) 我认为在这种情况下,最好将每个人都链接到一个联系我们页面,但在该页面上执行位置检查并相应地修改内容(无论是通过前端还是后端)。这样,当用户从外部站点访问您的“联系我们”页面时,您就可以排除任何混淆(例如,论坛帖子中标有“您可以通过 .../contactus2.html 联系他们”)。 我认为这是更好的方法,所以我会接受这个答案,我可能会使用 javascript 来检查位置 cookie,如果它不存在或 javascript 被禁用,那么什么也不做(所以通用页面按原样显示),但如果 cookie 在那里,则使用 js 更改地址。:) thx【参考方案2】:

如果禁用了 javascript,那么您将无能为力。 Javascript 将不会执行。 此流程可以由服务器端脚本独立于浏览器进行处理。

【讨论】:

【参考方案3】:

你不能将链接的href设置为contactus1.html,这样如果JS被禁用,链接仍然可以工作吗?至于未设置的 cookie,您只需检查 clientLocation 是否为 null(或空白或您的 readCookie 函数返回的任何内容),如果是,请将 href 设置为 contactus1.html。

【讨论】:

是的,你是对的,这将是一个简单的解决方案,但是如果脚本被禁用,那么即使在 标记中指定了链接的 href,浏览器也无处可去。我试过了:( 如果脚本被禁用,链接应该可以工作。你能分享你的html吗?【参考方案4】:

解决这个问题的一种方法是使用 php

就像你说的,如果用户的浏览器不支持 JS 或者只是没有它,它就无法工作,所以服务器端的解决方案可能会更好。

例如:

<?php

function generateLink($location)

 switch($location)
 
  case 0:
   echo '<a href="location1.html">Contact us</a>';
   break;
  case 1:
   echo '<a href="location2.html">Contact us</a>';
   break;
 


?>

【讨论】:

这听起来很接近解决方案。但我想更改链接的href,而不是回显它。您可能使用它简化了解释,但实际要求是如果 cookie 已放置且位置已知,则让客户端转到 contactus2 或 contactus3 html 文件,如果没有放置 cookie,则转到通用的contactus1.html。跨度>

以上是关于如何根据读取的 cookie 值使超链接指向不同的 url?的主要内容,如果未能解决你的问题,请参考以下文章

如何使超链接在 RichTextBox 中工作?

如何使用angularjs变量使超链接移动到下一页?

如何根据单元格的值使单元格颜色RGB值发生变化? (在Excel中)

PSQL - 查找所有值并根据另一列中的非唯一值使其唯一

如果所有子域都指向同一个网站,cookie 是不是会在多个子域之间共享? [复制]

根据淘汰赛中另一个元素的值使一个元素可见