Google Chrome работает только один раз - PullRequest
18 голосов
/ 10 января 2012

У меня есть страница, которая запрашивает установку Google Chrome Frame , если пользователь использует устаревший браузер.

Это прекрасно работает, если пользователь решает установить плагин.Но, если он / она решит не устанавливать его и закроет слой;Невозможно снова открыть слой, используя ту же кнопку.(В основном это работает только один раз.)

Можно ли каким-либо образом заставить Google Chrome Frame открываться каждый раз, когда я нажимаю на кнопку установки?
(я пытался принудительно создать cookie, но, похоже, не работает.)

update [# 1]:

Тестовая страница здесь .

<!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>

update [#2]:

Кажется, это проблема, связанная с сеансом .
Когда я перезагружаю браузер, ссылка снова работает один раз.Но не, однако, когда я только обновляю страницу.

[заключение]

Такое поведение предусмотрено .Это позволяет администратору check() для GCF на каждой странице, не раздражая пользователя каждый раз подсказкой.

Принятый ответ позволяет обойти это поведение.

1 Ответ

9 голосов
/ 12 января 2012

Вы правы насчет куки, но он досадно устанавливает приватную переменную, когда показывает всплывающее окно, поэтому без взлома скрипта cfinstall мы рассмотрим переопределение существующих методов.

Это лучшее, что я могу получить. Есть проблема, когда нажатие «отмена», а затем «закрытие» означает, что всплывающее окно все еще находится на 2-й странице, когда вы снова его всплываете, но вы можете установить оттуда, так что я не думаю, что это большая проблема. (Педанту во мне это не нравится!)

<!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>
...