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

场景

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

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

期望的结果:

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

我是从下面链接中的 stackoverflow 答案中得到的。 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)如果这是一个好方法

【问题讨论】:

    标签: javascript html


    【解决方案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。

      【讨论】:

      【解决方案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。跨度>
      猜你喜欢
      • 2012-04-15
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多