2013-03-15 57 views
1

方案如何根據讀取的cookie值將超鏈接指向不同的url?

在我的網站我有聯繫的「contactus.html」頁面的每一個網頁的菜單(常用的服務,公司簡介,聯繫我們的菜單),每個頁面使用Dreamweaver模板製成,菜單隻能在.dwt模板文件本身中編輯。

當用戶第一次訪問「index.html」時,將名爲「客戶端位置」的cookie放在客戶端的位置。

期望的結果:

當客戶點擊聯繫我們菜單項,我想讀的客戶位置 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爲好,但我想知道如果 一)會不會有無障礙問題 B)如果這是一個很好的方法

回答

2

當然你的「聯繫我們」頁面將有一個固定的位置?這似乎是一個不必要的用於cookie的cookie。

example.com/ContactUs可以從example.com/stuff/About通過鏈接到../ContactUs

同樣,你可以通過使用location.protocol + '//' + location.host(返回example.com這裏)和追加必要的拉頁文檔根引用。

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

感謝,但沒有與我們聯繫網頁上有多個位置,我們已經跨越城市和展示現場給客戶端的本地化版本的幾個回收點是必不可少的,讓他們知道他們正在處理與當地的公司而不是全市範圍的公司。 – 2013-03-15 14:49:05

+1

我看到了,現在我明白你的意思是「客戶位置cookie」。 :)我認爲在這種情況下,最好將每個人鏈接到一個聯繫我們頁面,但是在該頁面上執行位置檢查並相應地在那裏修改內容(通過前端或後端)。這樣,當用戶從外部網站訪問您的「聯繫我們」頁面時(例如以「.../contactus2.html」聯繫他們爲主題的論壇帖子),您可以排除任何混淆。 – 2013-03-15 15:01:33

+0

我認爲這是更好的方法,所以我會接受這個答案,我可能會使用JavaScript來檢查位置Cookie,如果它不存在或JavaScript被禁用,則什麼也不做(所以通用頁面顯示的是) ,但如果cookie在那裏,然後用js改變地址:) thx – 2013-03-15 16:16:17

0

如果javascript被禁用,那麼您就無能爲力。 JavaScript將不會執行。 此流程可以通過服務器端腳本處理與瀏覽器無關的流程。

0

您不能將鏈接的href設置爲contactus1.html,這樣如果JS被禁用,鏈接仍然可以工作?至於未設置的cookie,您可以檢查clientLocation是否爲空(或空白或您的readCookie函數返回),如果是,則將href設置爲contactus1.html。

+0

是的,你是對的,這將是一個簡單的解決方案,但如果腳本被禁用,那麼即使鏈接的href被指定在標記中,瀏覽器根本走不通。我嘗試過:( – 2013-03-15 14:56:54

0

那麼解決這個問題的一種方法就是使用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; 
} 
} 

?> 
+0

這聽起來非常接近解決方案,但我想改變鏈接的href,而不是回顯它。解釋但實際的要求是,如果cookie位置和位置已知,並且如果沒有放置cookie,則請聯繫contact2或contactus3 html文件,然後轉到contactus1.html,這是通用的。 – 2013-03-15 14:51:50