当旧浏览器不接受jquery时的替代方案

时间:2011-01-21 12:05:56

标签: javascript jquery safari cross-browser

我刚刚改变了这样一个事实:我网站的用户使用的是一个非常旧的浏览器,它不运行jquery(在这种情况下是Safari 1.x),因此无法访问使用jquery的登录面板slideToggle功能。

有人能想到一个能够检测浏览器是否能够使用jquery的修复程序 - 如果没有这个链接会转到另一个页面而不是显示登录面板吗?

8 个答案:

答案 0 :(得分:5)

您可以进行一些有条件的检查,例如

if(!'jQuery' in window) {
    // jQuery is not available
}

或者,如果Safari 1.x不知道IN运算符(我不确定),请使用

if(!window.jQuery) {
}

答案 1 :(得分:4)

我认为对此有另外的答案,但对我来说,我将不得不权衡你支持他过时的浏览器的时间(我确信网站内可能还有其他东西),而不是回报给你......

答案 2 :(得分:2)

在登录链接的href =的纯HTML源代码中,将其设置为纯HTML登录页面。

使用jQuery,将点击处理程序附加到链接,如果此部分失败,那没关系,浏览器将只关注指向普通登录页面的链接中的href,允许旧浏览器用户登录。 / p>

$(document).ready(function(){
  $('#login_link_id').click(function(){
    // Your code here
  });
});

答案 3 :(得分:1)

如果您使用javascript / jQuery,您应该始终确保您的网站在没有它的情况下完美运行。在这种情况下,如果您有一个登录弹出框;你可能会分配一个在DOM加载后分配的点击事件。

您应该做的是确保如果jQuery不存在,则链接会加载“普通”登录网页而不是弹出框。我使用类似的东西:

<a href="/login.html" id="loginlink">Log in</a>
<script>
    if(!'jQuery' in window) {
        $(document).ready(function(){
            //assign on click event to loginlink
        });
    }
</script>

如果jQuery不存在,则login.html将正常打开。

答案 4 :(得分:0)

哇,真的吗?! Safari 1.x ??无论如何,试试这个......

var isJQSupported = false;

$(function() { //shorthand for document.ready

  isJQSupported = true;

  //your usual code


});

if (!isJQSupported) {

  window.location = "http://www.apple.com/safari/download/";

}

答案 5 :(得分:0)

对我而言,听起来像safari 1.X内部存在jQuery问题。这意味着简单的检查,例如全局空间中是否存在$或者$(函数)是否做任何事情都无济于事。

最可能的根本原因是javascript会在加载jQuery本身时抛出错误,然后会停止执行其余的javascript代码。

这里有四个可行的选择。

  • 使网站与noscript一起使用。用纯HTML和回发替换您的登录控件,并要求用户关闭javascript。此选项很有用,因为您不会特别修复safari 1.x问题。
  • 您可以对safari 1.X和其他不支持的浏览器进行javascript检查,只能通过脚本标记注入或ajax加载jQuery(如果您的用户使用支持的浏览器)。如果用户使用的浏览器与jQuery不兼容,那么您可以使用普通的javascript。
  • 获取safari 1.x的副本,看看为什么jQuery会中断。然后修复它并要求它进入jQuery 1.5的发布。这依赖于修复是可以在没有黑客攻击的情况下完成的,并且jQuery团队同意值得添加。
  • 要求用户使用兼容的浏览器。

可能还有更多选择。我个人倾向于要求用户使用兼容的浏览器,因为支持Safari 1.x是荒谬的。

答案 6 :(得分:0)

这似乎需要progressive enhancement的情况。

您必须进行多项检查

  1. 查看$ exists
  2. 查看$ .fn是否存在
  3. [不确定是否需要]检查$ .support是否为函数
  4. 根据需要使用$ .support()http://api.jquery.com/jQuery.support/
  5. 检查功能支持

    在检查结束时,当jQuery报告您需要的功能时 - 脚本的其余部分可以运行。

    如果你不确定你使用的支持中提到了哪些功能,那么这可能需要在Safari 1.x上进行一次测试才能看到$ .support()返回的值是什么,但这就是你的讨厌旧浏览器用户可以为您做(如果您准备代码并发布)并报告生成的文本。然后,将列表与可访问的其他[旧]浏览器进行比较,并确定所需的功能。

    如果缺少任何功能,那么简单的方法就是要求所有内容并取消所有脚本。这也将排除IE6和IE7以及低于9.something和firefox低于2.0或包含的歌剧 - 我不确定。

答案 7 :(得分:0)

使用服务器端语言检测它是否是基于用户代理的旧Safari,并加载不同的javascript文件