【问题标题】:Creating Javascript History like Object in Coldfusion在 Coldfusion 中创建类似对象的 Javascript 历史
【发布时间】:2010-01-05 09:28:49
【问题描述】:

我想为我的网站创建一个历史对象,它应该类似于 Javascript 历史对象。

我想使用此对象为我的网站创建上一个/下一个导航链接。 Javascript 历史对象的问题在于它基于 Window 对象,而不是特定于网站的。并且使用此对象单击“上一个”链接可能会导致离开我的网站。

在 Coldfusion 中创建历史对象的最佳方法应该是什么?

【问题讨论】:

  • 您想阻止人们使用历史按钮离开您的网站?
  • 是的,如果我能阻止人们离开我的网站,那就太好了。
  • 我认为有法律禁止这样做。 (如果没有,应该有;)

标签: java javascript coldfusion


【解决方案1】:

看看听起来像“我怎样才能让用户更好地浏览我的网站?”这样的全球性问题?我可以回答三个重要的问题:

  1. 明显的导航又名主菜单。特别是当你有很多链接时。解决方案可能会有所不同:普通链接、标签、下拉菜单等。
  2. 使用breadcrumbs。人们应该能够升级(尽管它并不总是“返回”动作)。
  3. 历史。实施自定义历史记录可能很有用,例如对于电子商店 - 以可靠且方便的方式显示以前查看过的内容。

请注意,历史是任务 #3,而不是 1 或 2。解释这一切的原因是您的历史不应该为 #1(绝对)和 #2(有时可能是)。

基本上可以通过两种方式存储历史记录:仅用于当前会话(对于任何用户)和会话之间(通常用于已登录用户)。

最简单的方式来实现第一种方式是使用 ColdFusion 会话。创建会话时(onSessionStart() 如果使用 Application.cfc)初始化容器,我会使用数组。

考虑以下示例:

<cfscript>
    session.history = [];
</cfscript>

当用户打开新页面时(即使在新标签页中——这会启动新的浏览器历史记录)——将页面信息推送到容器中(页面至少应该包含链接和标签类型):

<cfscript>
    page = {};
    page.link = "/index.cfm?product=100";
    page.label = "Product Foo";
    ArrayAppend(session.history, page);
</cfscript>

最后,在页面模板的某个地方循环这个数组并显示链接:

<cfloop array="#session.history#" index="page">
    <div><a href="#page.link#">#HTMLEditFormat(page.label)#</a></div>
</cfloop>

显然,如果你想显示上一个/下一个链接,你应该修改存储历史的方式,也许也保持当前页面位置(在数组中)——选择上一个和下一个元素。虽然作为一个用户我不会觉得这样的功能很有用。

最后,如果您想存储会话之间的历史,只需将此数据集写入由用户 id (fk) 标识的数据库中,并在用户登录时恢复。

请记住,强烈建议在读/写时使用锁定

【讨论】:

  • 几乎不再需要在读取会话变量时使用锁,除非您正在处理用于写入会话的竞争条件锁定,否则您也不需要锁定。
【解决方案2】:

阻止人们离开您的网站是一件蹩脚且烦人的事情。你这样做有充分的理由吗?

【讨论】:

  • 因为这个 Previous 链接在我的网站内。用户通常希望通过下一个和上一个链接在网站内导航。
【解决方案3】:

您是否使用网站上的链接/按钮作为后退按钮?

如果是这样,如果 history-1 不包含您的域名,您可以使用 javascript 隐藏您网站中的“上一个”链接/按钮。

edit - 由于安全原因,您不能使用历史对象,但可以使用 document.referrer。

<head>
<script language="javascript">
    function showBackLink(){
        var ref = document.referrer;
        var fromThisDomain = ref.indexOf("yourdomain.com");
        if(fromThisDomain > 0){ // your domain was found, show the link
            document.getElementById("backLink").style.display = "";
        }else{ // your domain was not found, hide the link
            document.getElementById("backLink").style.display = "none";
        }
    }
</script>
</head>


<body onload="showBackLink();">
<a ID = "backLink" href  = "javascript: history.go(-1);">prev</a>

</body>

【讨论】:

  • 是的,我正在使用我网站上的链接。可以给我写个例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
相关资源
最近更新 更多