如何根据读取的 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.html 或 contactus3.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?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据单元格的值使单元格颜色RGB值发生变化? (在Excel中)