3

我们是一家年轻的初创公司,下周将推出一款独特的聊天产品。我们的聊天目前基于 Jabber(使用 Openfire 作为我们的 Jabber 服务器)通过 BOSH(使用旁遮普语),使用 jQuery 作为我们的客户端脚本。

目前,我们当前设置的最关键问题是站点导航,当在我们网站的页面之间导航时,BOSH 连接会丢失,直到新页面加载并且 BOSH 连接通过身份验证。由于这个问题,我们必须设置一个非常大的超时时间(大约 1 分钟),然后才能注销离开我们网站但未退出的用户。

我们知道基于 javascript 锚点的导航解决方案,但实现这一点需要对我们网站的标记、CSS 和 JS 脚本进行许多更改,并且我们的网站结构非常复杂。

还有其他解决方案吗?我在考虑基于框架的导航,当一个页面将包含 2 个 iframe - 一个隐藏并保存 BOSH 连接,一个保存真实页面内容。此解决方案的问题在于它会影响用户的感觉,并且位置栏中的 URL 将始终保留包含框架的页面的 URL。

对于我们的问题,有什么不需要完全重写网站结构/标记的解决方案吗?

提前致谢!

4

3 回答 3

1

虽然这可能不是一个完整的重写,但我会说这需要一些工作。让聊天框留在那里并在内容中添加 ajax,即,如果像在 facebook 上一样,底部有聊天栏,则将其余部分放在一个 id 中,您将页面添加到 ajax 中。换句话说,将聊天从您的布局中取出,将其分开,并将您的链接放入 ajax 请求中,这些请求可以通过全局链接处理程序和通过搜索替换的链接进行处理,并通过 sed 替换所有文件。(href=" 更改为 href="javascript:urlhandler( 但这需要考虑外部链接)我能想到的另一个选项是在您的网站上有两个 iframe。主要和聊天。并为那些导航的人提供会话 cookie从页面,D / C或他们会发生的任何事情。

于 2009-11-17T00:56:13.443 回答
1

您是否在每个页面上使用聊天的实现?如果是这样,答案是调整脚本的缓存。确保所有大型 JS 文件都是外部的,并且服务器没有注册任何更改(例如:上次修改)。将图像组合成精灵。通过存在的许多缩小器之一运行您的代码。最后但同样重要的是,投资 CDN。Amazon CloudFront 既简单又便宜:您会发现它在提高性能方面效果显着。

于 2009-11-17T03:16:38.230 回答
0

您可以使用 jquery 的历史插件 ( http://www.mikage.to/jquery/jquery_history.html ) 来处理向后和向前导航并通过 ajax 加载页面,就像您所说的那样。

像这样的东西应该可以工作(未经测试):

第1页.htm:

<html>
<head><title>Page 1</title></head>
<body>
     <div id="content">
         <a href="/page2.htm">Load Page 2</a>
     </div>
    <div id="chat"></div>
</body>
<script>
    $(function(){
        function loadPage(hash){
            if($.browser.msie) {
         hash = encodeURIComponent(hash);
        }
            $.ajax({
                "url":hash,
                "success":function(response){
                     var newPage = $(response);
                     document.title=newPage.find("title").html();
                     $("#content").html(newPage.find("#content").html());
                 }
            });
            return false;
        }
        $.historyInit(loadPage);
        $("a").live("click",function(){
            $.historyload(this.href);
        });
    });
</script>
</html>

Page2.htm:

<html>
<head><title>Page 2</title></head>
<body>
     <div id="content">
         <a href="/page1.htm">Load Page 1</a>
     </div>
    <div id="chat"></div>
</body>
<script>
    $(function(){
        function loadPage(hash){
            if($.browser.msie) {
         hash = encodeURIComponent(hash);
        }
            $.ajax({
                "url":hash,
                "success":function(response){
                     // this is just an example and not too efficient.
                     var newPage = $(response);
                     document.title=newPage.find("title").html();
                     $("#content").html(newPage.find("#content").html());
                 }
            });
            return false;
        }
        $.historyInit(loadPage);
        $("a").live("click",function(){
            $.historyload(this.href);
        });
    });
</script>
</html>

如果您想将工作外包给我,我很乐意提供帮助。:o)

于 2009-11-18T15:17:20.457 回答