Google Chrome框架叠加仅适用一次

时间:2012-01-10 12:52:02

标签: javascript jquery internet-explorer google-chrome-frame

如果用户使用过时的浏览器,我有一个页面会提示您安装 Google Chrome Frame

如果用户选择安装插件,则效果很好。但是,如果他/她选择不安装它并关闭该层;使用相同的按钮再次打开图层是不可能的。 (基本上它只能工作一次。)

我是否可以在每次点击安装时强行启用Google Chrome Frame?
  (我尝试过强制cookie,但似乎没有用。)

更新[#1]:

测试页here

<!doctype html>
<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <!--[if IE]>
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js"></script>
        <![endif]-->
    </head>
    <body>
        <a href="#" class="dngcf">Prompt</a>
        <script>
            $(function(){
                if( $.browser.msie && $.browser.version < 9 ){
                    if( navigator.userAgent.indexOf('chromeframe') < 0 ){
                        $('.dngcf').bind('click', function(){
                            //document.cookie = 'disableGCFCheck=0;path=/;';
                            CFInstall.check({
                                url: 'http://www.google.com/chromeframe/eula.html?user=true',
                                mode: "overlay",
                                destination: "http://mywebsite.com"
                            });
                        });
                    }else{
                        alert('GCF is already installed');
                    }
                }else{
                    alert('You need IE 6, 7 or 8 in order to see the "bug".');
                }
            });
        </script>
    </body>
</html>

更新[#2]:

这似乎是与会话相关的问题 当我重新启动浏览器时,链接再次运行一次。但是,当我只刷新页面时却不会。

[结论]

此行为是设计。它允许管理员在每个页面上为check()进行GCF,而不会每次都向用户发出提示。

  

接受的答案允许您规避此行为。

1 个答案:

答案 0 :(得分:9)

你对cookie是正确的,但它在显示弹出窗口时也会设置一个私有变量,因此如果不破解cfinstall脚本,我们会考虑覆盖现有方法。

这是我能得到的最好的。有一个问题,按“取消”然后“关闭”意味着当你再次弹回它时弹出窗口仍然在第二页,但你可以从那里安装,所以我不认为这是一个大问题。 (我内心的学生不喜欢它!)

<!doctype html>
<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <!--[if IE]>
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js"></script>
        <![endif]-->
    </head>
    <body>
        <a href="#" class="dngcf">Prompt</a>
        <script>
            $(function(){
                if ($.browser.msie && $.browser.version < 9){
                    if (navigator.userAgent.indexOf("chromeframe") < 0){
                        $(".dngcf").on("click", function(){
                            if ($(".chromeFrameOverlayContent").length > 0) {
                                $(".chromeFrameOverlayContent, .chromeFrameOverlayUnderlay").show();
                            } else {
                                CFInstall.check({
                                    url: "http://www.google.com/chromeframe/eula.html?user=true",
                                    mode: "overlay",
                                    destination: "http://mywebsite.com"
                                });
                                $("#chromeFrameCloseButton").off("click").on("click", function() {
                                    $(".chromeFrameOverlayContent, .chromeFrameOverlayUnderlay").css({ display: "none" });
                                });
                            }
                        });
                    } else {
                        alert('GCF is already installed');
                    }
                } else {
                    alert('You need IE 6, 7 or 8 in order to see the "bug".');
                }
            });
        </script>
    </body>
</html>